其他分享
首页 > 其他分享> > rest_framework:序列化器类

rest_framework:序列化器类

作者:互联网

一.序列化器类

序列化就是把数据转换为json 在服务端发送到客户端
反序列化是客户端法的数据发送到服务端 服务端通过反序列化把数据转换为json

from rest_framework import serializers

serializers 是dfr提供给开发者调用的序列化模块 里面声明了所有可用序列化器的基类

serializer 序列化基类 drf中所有的序列化器类都必须继承serializer

ModelSerializer  模型序列化器类 是序列化的子类 在工作中 除了serializer基类以外 最常用的序列化类基类 

1).serializer

1.1转换的字段说明(序列化)

先在应用下创建序列化器文件 然后在文件中:
class Serializer1(serializers.Serializer):
    # 1.转换的字段声明(把数据放到序列化器中就会转换为对应的类型)
    # 格式: 字段 = serializers.字段类型(选项=选项值)
    id = serializers.IntegerField()
    title = serializers.CharField()
  
serializers.py
urlpatterns = [
    path('BookView/', views.BookView.as_view()),
]
urls.py
 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转换的字段说明(反序列化)

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 urls.py
    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
来源: https://www.cnblogs.com/whc6/p/16627322.html