ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

rest_framework:序列化器类

2022-08-26 14:01:30  阅读:190  来源: 互联网

标签:serializers data py rest framework 序列化 True serializer


一.序列化器类

序列化就是把数据转换为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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有