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

rest_framework:序列化器类

时间:2022-08-26 14:04:04浏览次数:53  
标签: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
From: https://www.cnblogs.com/whc6/p/16627322.html

相关文章

  • 面试题:Java序列化与反序列化
    目录序列化和反序列化的概念应用场景?序列化实现的方式继承Serializable接口,普通序列化继承Externalizable接口,强制自定义序列化serialVersionUID的作用静态变量不会被序列......
  • flask-restful使用指南
    flask-restful是flask模块的一个扩展,能够快速构建restful风格的api。对于其他的扩展也有很高的兼容性。安装flask_restfulpipinstallflask_restful简单使用fromfl......
  • DRF当中序列化器中通过重写create()来实现保护登录保护
    在DRF原来源码框架中,我们知道保存的用户信息时,用户的密码是被明文保存到数据库中。代码实classUserRegisterModelSerializer(serializers.ModelSerializer)   """......
  • netcore项目的 dll 用在netframework项目的乌龙错误,异常类型:TargetInvocationExcepti
    数据保存插入时报错    1:多个win7 客服机 , 只有一台全部报错. 2:是局域网连本地数据库,还有个远程sqlserver数据库两者都存在问题.测试时本机都无数......
  • restfulAPI接口规范/django rest_Framework_环境
    一.RESTFUlAPI设计1).域名应该将api部署在专用域名下https://www.baidu.com/api/2).版本应该将API版本号放到路径中https://www.baidu.com/api/1.0/loginhttps:......
  • 序列化和反序列化
    序列化:把对象变成字符串。一般对象和json格式一样。反序列化:把json字符串转化为对象类型。 参考资料:C#JsonConvert.DeserializeObject反序列化与JsonConvert.Serial......
  • 序列化与反序列化的用法
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Runtime.Serialization.Formatters.Binary;usingSystem.IO;n......
  • fastjson反序列化CNVD-2019-22238
    漏洞原理:fastjson是阿里的开源json解析库,用来将json字符串反序列化为JavaBean类,或者将JavaBean类序列化为json字符串。在java审计中,需要关注的关键字:JSON.parse,......
  • Android开发 debug调试framework
    前言Android系统开发有一个很麻烦的点就是想看代码调用情况的时候每次打log都要编译系统或者单编模块,费时费力特别影响效率。偶然间发现了framework也可以debug调试,所......
  • Presto与Hive语法差异
    Presto与Hive的语法差异示例: PrestoHive备注数组数组有动态下标,下标从1开始下标从0开始 标识符不能以数字开头命名,与java保持一致无 string......