关于序列化器的使用和处理

关于序列化器的使用和处理,第1张

关于普通序列化器和模型序列化器


1:普通序列化器

众所周知Response不能直接返回orm对象的,所以需要我们进行序列化 *** 作,可以通过手动将其转为字典或JSON,也可以使用DRF所提供的序列化器

####下面的是代码模块

import re

from rest_framework import serializers
from rest_framework.exceptions import ValidationError

# 部门的序列化器
from users.models import Department, Duty, Staff


class DepartmentSer(serializers.Serializer):
    #read_only=True 只做序列化输出
    id = serializers.IntegerField(label='部门编号',read_only=True)
    #三种基本的校验约束 # max_length=(数字,数值) 最大长度   min_length= 最小长度   allow_null=True允许为空  trim_whitespace=True反序列的时候输入数据库去掉两旁空格
    name = serializers.CharField(label='部门名称',max_length=50,min_length=2,allow_null=True,trim_whitespace=True)
    #全局校验
    def validate(self,data):
        print('正在进行校验:',data)
        ...
        return data
    #校验不通过
    # raise ValidationError

    #重写create方法
    def create(self, validated_data):
        #保存数据  **就是把里面东西解出来
        dep = Department.objects.create(**validated_data)
        return dep

    #重写update方法
    def update(self, instance, validated_data):
        instance.name = validated_data['你要进行重编的字段名称'] ----列如我的是name,那就是['name'],还有另一种办法用的get,我现在用的是参考与-----地址在下面
        instance.save()
        return instance

##在编写代码的过成中你还可以进行一些校验,已达到对某些特殊字段进行一个约束的作用,一共有三种校验方式,全局>>列如我代码块里的   2:局部 推荐使用局部   3:在字段里对其进行限制,在字段外定义,字段里进行限制,类似于单个字段

def a(name):
    return name

# 职务类-
class DutySer(serializers.Serializer):
    id = serializers.IntegerField(label='职务编号',read_only=True)
    name = serializers.CharField(label='部门名称',max_length=50,min_length=2,allow_null=True,trim_whitespace=True,
                                 validators=[a,])

# validators=[a,] 指明字段 []里面写以什么开始  ----对于这个我也不是很了解 只能按照我自己想的跟大家说了  

但是普通序列化器有一个很大的不足之处,就是如果你的代码字段多了以后,工作量和代码量就会变的很大,这样对于我们出错的几率也会变的很大,并且有关于时间和有关于时间DateTimeField DateField 等字段类型的序列化直接通过JOSN也是不行的

2: 模型序列化器

刚刚讲了普通序列化器,对于模型类字段少的,还行,但是多的话,还是建议大家使用模型序列化器,模型类序列化器可以更加方便的进行字段映射以及内置方法的编写

其优点:

1:基于模型类自动生成的一些列字段

2:自动生成的系列字段,同时还包含unique max_length等属性校验

3:不需要在重写的createupdate方法

4:明天我在说吧

参考链接----如果你报错可以去参考一下序列化类用的serializer报错update() must be implemented_只因为你而温柔的博客-CSDN博客p序列化类用的serializer, 修改数据时报错update() must be implemented.源码解决方法重写序列化类里的update方法class ShopCartSerializer(serializers.Serializer):"""购物车序列化类"""# 因为我们模型类设置了unique_together 我们在这里用ModelSerializer# ...https://blog.csdn.net/zsx1314lovezyf/article/details/101364225

 普通序列化器的导入方式

from rest_framework import serializers

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/733177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存