Django Rest Frame work 如何使用serializers序列化
Django Rest Framework提供了serializers模块,用于序列化和反序列化模型实例以及Python原生数据类型。下面是一个使用serializers模块的简单示例:
首先,我们需要导入serializers模块和要序列化的模型类:
from rest_framework import serializers from myapp.models import MyModel
接下来,我们定义一个serializers类,将要序列化的模型类传递给Meta类的model属性:
class MyModelSerializer(serializers.ModelSerializer): class Meta: model = MyModel fields = ('id', 'name', 'description')
在这个示例中,我们只序列化模型类的三个字段:id、name和description。你可以根据你的需求选择序列化哪些字段。
在序列化数据时,我们可以使用MyModelSerializer类的实例,并将要序列化的模型实例传递给它的构造函数。例如,假设我们有一个名为mymodel的MyModel实例:
mymodel = MyModel.objects.get(id=1) serializer = MyModelSerializer(mymodel)
我们可以访问serializer的数据属性来获取序列化后的数据:
print(serializer.data)
最后,如果我们需要反序列化请求数据并创建一个新的模型实例,我们可以在MyModelSerializer中定义create()方法和update()方法。这些方法用于从反序列化的数据中创建或更新模型实例。例如,如果我们想要创建一个新的MyModel实例,我们可以这样做:
class MyModelSerializer(serializers.ModelSerializer): class Meta: model = MyModel fields = ('id', 'name', 'description') def create(self, validated_data): return MyModel.objects.create(**validated_data)
在上面的例子中,create()方法从validated_data字典中创建一个新的MyModel实例并返回它。
在Django Rest Framework中,使用APIView类创建API视图。这个类提供了处理HTTP请求的方法(例如GET、POST、PUT、DELETE等)并且可以自动生成API文档。
要查看自动生成的API接口,可以使用Django Rest Framework的Browsable API功能。Browsable API提供了一个交互式的API浏览器,可以轻松地查看API端点以及它们所支持的请求方法和参数。
首先,确保你已经安装了Django Rest Framework并启用了Browsable API。你可以在你的settings.py文件中添加以下设置来启用Browsable API:
INSTALLED_APPS = [ # ... 其他应用程序... 'rest_framework', ] REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.BrowsableAPIRenderer', ] }
接下来,在你的APIView视图中添加一个URL模式,并确保使用的是rest_framework.urlpatterns模块:
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from rest_framework.decorators import api_view from rest_framework import serializers class MyModelSerializer(serializers.ModelSerializer): class Meta: model = MyModel fields = ('id', 'name', 'description') class MyModelView(APIView): def get(self, request, format=None): mymodels = MyModel.objects.all() serializer = MyModelSerializer(mymodels, many=True) return Response(serializer.data) def post(self, request, format=None): serializer = MyModelSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) from rest_framework.urlpatterns import format_suffix_patterns from django.urls import path urlpatterns = format_suffix_patterns([ path('mymodels/', MyModelView.as_view(), name='mymodel-list'), ])
现在启动Django开发服务器并访问浏览器。在浏览器中,转到http://localhost:8000/mymodels/。您应该会看到Browsable API界面,其中包含有关API端点的信息和允许您测试端点的表单。在Browsable API中,您可以轻松地查看自动生成的API文档和测试您的API视图。
在前端使用Django Rest Framework API接口,可以使用各种库和框架来执行HTTP请求并处理响应数据。以下是一些常用的库和框架:
- jQuery: 一个广泛使用的JavaScript库,它提供了执行Ajax请求的简单API。
$.ajax({ url: '/api/mymodels/', dataType: 'json', success: function(data) { console.log(data); } });
- Axios: 一个基于Promise的JavaScript HTTP客户端,可以在浏览器和Node.js中使用。
axios.get('/api/mymodels/') .then(function (response) { console.log(response.data); }) .catch(function (error) { console.log(error); });
- Fetch API: 一种现代的JavaScript API,用于执行HTTP请求并处理响应数据。
fetch('/api/mymodels/') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error));
无论你选择哪个库或框架,你需要确保正确处理响应数据。一般来说,Django Rest Framework返回的响应数据是JSON格式的,你需要使用库的JSON解析器将数据解析为JavaScript对象。然后,你可以使用JavaScript来处理这些数据并更新你的应用程序界面。
注意,如果你的Django Rest Framework API需要身份验证或授权,你需要在前端请求中包含有效的身份验证凭据或令牌。这通常涉及将令牌添加到请求标头或使用cookie。在使用身份验证和授权时,请注意保护你的应用程序免受潜在攻击。
如果你想在Django Rest Framework中重写自动生成的API,你可以使用APIView或其子类创建自定义视图。APIView类提供了处理HTTP请求的方法,例如GET、POST、PUT和DELETE,以及处理异常、身份验证和授权的方法。你可以在自定义视图中使用Django ORM或其他数据访问库来检索或更新数据,并使用序列化程序将数据转换为JSON或其他格式。
以下是一个使用APIView创建自定义视图的示例:
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from .models import MyModel from .serializers import MyModelSerializer class MyModelList(APIView): def get(self, request): mymodels = MyModel.objects.all() serializer = MyModelSerializer(mymodels, many=True) return Response(serializer.data) def post(self, request): serializer = MyModelSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
在这个例子中,我们创建了一个名为MyModelList的视图类,并实现了GET和POST方法来处理HTTP GET和POST请求。在GET方法中,我们检索所有的MyModel对象并将它们序列化为JSON格式。在POST方法中,我们使用MyModelSerializer将请求数据反序列化为MyModel对象,并将其保存到数据库中。
然后,我们需要将视图类绑定到URL模式,以便Django Rest Framework可以将请求路由到正确的视图。在这个例子中,我们可以将以下URL模式添加到我们的urls.py文件中:
from django.urls import path from .views import MyModelList urlpatterns = [ path('mymodels/', MyModelList.as_view(), name='mymodel-list'), ]
在这个URL模式中,我们将'/mymodels/'路径映射到MyModelList视图。现在,我们可以访问我们的自定义视图,而不是使用Django Rest Framework自动生成的视图。
如果你想在Django Rest Framework自动生成的API中添加新的功能,你可以通过扩展自动生成的视图来实现。Django Rest Framework自动生成的视图类提供了大量的可扩展性,包括添加新的HTTP方法、自定义查询集、添加额外的字段等。
以下是一些常见的扩展自动生成的视图的示例:
- 添加新的HTTP方法:
from rest_framework import generics class MyModelList(generics.ListCreateAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer def put(self, request, *args, **kwargs): # 实现PUT方法的逻辑 return self.update(request, *args, **kwargs) def delete(self, request, *args, **kwargs): # 实现DELETE方法的逻辑 return self.destroy(request, *args, **kwargs)
在这个例子中,我们扩展了ListCreateAPIView视图,为它添加了PUT和DELETE方法。在这些方法中,我们实现了自己的PUT和DELETE逻辑,并调用父类的update()和destroy()方法来执行更新和删除操作。
- 自定义查询集:
class MyModelList(generics.ListCreateAPIView): serializer_class = MyModelSerializer def get_queryset(self): # 添加自定义查询集逻辑 return MyModel.objects.filter(owner=self.request.user)
在这个例子中,我们重写了get_queryset()方法来自定义查询集。我们可以使用self.request对象来访问当前请求,并使用它来过滤查询集。在这个例子中,我们只返回当前用户拥有的MyModel对象。
- 添加额外的字段:
class MyModelSerializer(serializers.ModelSerializer): extra_field = serializers.SerializerMethodField() class Meta: model = MyModel fields = '__all__' def get_extra_field(self, obj): # 添加额外字段的逻辑 return "Extra Value"
在这个例子中,我们扩展了MyModelSerializer序列化程序,为它添加了一个额外的字段。我们使用SerializerMethodField字段来创建额外的字段,并实现get_extra_field()方法来返回字段的值。在这个例子中,我们返回了一个字符串"Extra Value"作为额外字段的值。
通过扩展自动生成的视图和序列化程序,你可以为Django Rest Framework自动生成的API添加新的功能。这些扩展功能可以帮助你更好地满足你的业务需求,并提供更好的用户体验。
Django Rest Frame work 如何使用serializers序列化的更多相关文章
- [python]django的mode设置表结构和serializers序列化数据
框架使用的库版本 python3.6.5 Django-2.0.6 djangorestframework-3.8.2 mysqlclient-1.3.12 1.项目结构声明,数据库在setting. ...
- Serializers 序列化组件
Serializers 序列化组件 为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转 ...
- Django组件补充(缓存,信号,序列化)
Django组件补充(缓存,信号,序列化) Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑 ...
- Django-Rest-Framework的序列化之serializers 序列化组件
Django-Rest-Framework的序列化之serializers 序列化组件 restful framework 正常的序列化 from django.http import HttpRes ...
- Django框架深入了解_02(DRF之序列化、反序列化)
序列化:将Python对象准换成json格式的字符串,反之即为反序列化 DRF的序列化使用过程: 使用drf的序列化组件 -1 新建一个序列化类继承Serializer -2 在类中写要序列化的字段 ...
- django rest framework serializers序列化
serializers是将复杂的数据结构变成json或者xml这个格式的 serializers有以下几个作用: - 将queryset与model实例等进行序列化,转化成json格式,返回给用户(a ...
- django rest_framework Serializers 序列化组件
为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿 ...
- Django Rest Framework源码剖析(六)-----序列化(serializers)
一.简介 django rest framework 中的序列化组件,可以说是其核心组件,也是我们平时使用最多的组件,它不仅仅有序列化功能,更提供了数据验证的功能(与django中的form类似). ...
- Django serializers 序列化 rest_framework
参考官方文档1(你懂的):http://www.django-rest-framework.org/api-guide/serializers/ 参考官方文档2(你懂的):http://www.dja ...
- DRF框架之 serializers 序列化组件
1. 什么是序列化,其实在python中我们就学了序列化工具json工具,就是吧信息存为类字典形式 2. DRF框架自带序列化的工具: serializers 3. DRF框架 serializers ...
随机推荐
- Linux route命令修改默认路由优先级
(自测可用)摘自:https://www.cnblogs.com/luoyang712/p/11953256.html 在多个网络连接的情况下,比如以太网和WIFI同时存在的时候,路由表中就会存在多个 ...
- 存储型XSS的利用
一.存储型XSS漏洞利用原理 攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码.意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本. 二.漏洞利 ...
- 2022-05-05内部群每日三题-清辉PMP
1.在项目规划阶段,质量保证经理建议实施三重测试环境以确保产品质量.项目经理确定这项建议将会增加成本,而且开发和认证环境将足以保证质量.项目经理应使用什么来影响质量保证经理? A.质量成本(COQ) ...
- 创建一个spring项目
- echart lengend 选中事件
根据列选项 来改变echart y轴数值 前4个指标 甲方要求 95~100 第5个 要求 0~10如果混合起来 就是 0~100 这时的我 不由的破口大骂!!!但是 该干的活还是得干 干货如下:
- case语法案例
case语法案例 制作nginx启停脚本 1.条件: 2.思路: 3.脚本 添加删除openvppn用户的脚本 1.实现要求 2.具体脚本 case语法案例 制作nginx启停脚本 1.条件: 启动服 ...
- 096_mulesoft with salesforce _01
https://docs.mulesoft.com/mule-runtime/3.5/connect-with-salesforce-example https://www.youtube.com/w ...
- JDK下载很慢
方法1.直接百度jdk镜像,搜到华为镜像:https://repo.huaweicloud.com/java/jdk/ 方法2.到官网拷贝下载的url:https://download.oracle. ...
- CORScanner-20211125
Usage: cors_scan.py [-h] [-u URL] [-i INPUT] [-t THREADS] [-o OUTPUT] [-v] [-d [HEADERS [HEADERS ... ...
- UF_CURVE_ask_arc_data圆弧角度
1 UF_CURVE_arc_t Obj_data; 2 UF_CURVE_ask_arc_data(tObject[i], &Obj_data); 3 double Sp = Obj_dat ...