一.序列化器类
序列化就是把数据转换为json 在服务端发送到客户端 反序列化是客户端法的数据发送到服务端 服务端通过反序列化把数据转换为json from rest_framework import serializers serializers 是dfr提供给开发者调用的序列化模块 里面声明了所有可用序列化器的基类 serializer 序列化基类 drf中所有的序列化器类都必须继承serializer ModelSerializer 模型序列化器类 是序列化的子类 在工作中 除了serializer基类以外 最常用的序列化类基类
1).serializer
1.1转换的字段说明(序列化)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
先在应用下创建序列化器文件 然后在文件中: class Serializer1(serializers.Serializer): # 1.转换的字段声明(把数据放到序列化器中就会转换为对应的类型) # 格式: 字段 = serializers.字段类型(选项=选项值) id = serializers.IntegerField() title = serializers.CharField()serializers.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
urlpatterns = [ path('BookView/', views.BookView.as_view()), ]urls.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 from seriali.serializers import Serializer1 2 from django.views import View 3 from django.http.response import JsonResponse 4 from app01.models import Book 5 6 7 class BookView(View): 8 def get(self,request): 9 """序列化器-序列化阶段的调用""" 10 # 1.获取数据集 并把数据放到序列化器中 11 book_list = Book.objects.filter() 12 # print(book_list.title) 13 #2. 实例化序列化器 得到序列化方法 14 # 注意!!!: 传递到序列化器的模型对象如果是多个,务必使用many = True 如果是单独的比如 Book.objects.filter() 可以不加many=True 15 serializer = Serializer1(instance=book_list,many=True) 16 #3. 调用序列化器对象的data方法 这个方法会获取转换后的数据 17 data = serializer.data 18 return JsonResponse(data=data,status=201,safe=False)Views.py
1.2转换的字段说明(反序列化)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Serializer(serializers.Serializer): # 1.转换的字段声明 # 比如id字段需要转换为json就可以写上 # 格式: 字段 = serializers.字段类型(选项=选项值) id = serializers.IntegerField(read_only=True,max_value=100,min_value=0,error_messages={"max_value":"最大值为100"}) # read_only=True 在客户端提交数据[反序列化阶段不会要求id字段] max_value=100表示值最大为一百 min_value=0表示值最小为0 title = serializers.CharField(required=True) # required=True 反序列化阶段必须 state = serializers.BooleanField(default=True) # default=True 反序列化阶段 客户端没有填写 默认为True pub_date = serializers.CharField(allow_blank=True,allow_null=True) # 允许客户端不填写内容(none) 或者值为""serializers.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def get(self,request): # 反序列化数据--采用字段选项来验证数据 # 1.接受客户端提交的数据 args = json.loads(request.body.decode()) print(args) # 1.1. 实例化序列化器 获取序列化对象 serializer = Serializer(data=args) # 1.2 调用序列化器进行数据验证 # raise_exception=True表示如果有异常直接抛出 代码不会往下执行 ret = serializer.is_valid(raise_exception=True) #ret返回True表示成功 如果返回False表示失败 # 1.3 获取验证后的结果 if ret: print(serializer.validated_data) #serializer.validated_data 获取反序列化后的结果 else: print(serializer.errors) # serializer.errors 获取异常数据结果 # 2. 操作数据库 # pass # 3. 返回结果 return JsonResponse(data={}, status=201, safe=False)views.py
标签:serializers,data,py,rest,framework,序列化,True,serializer From: https://www.cnblogs.com/whc6/p/16627322.html