• DRF中的模型序列化是什么


    模型序列化的作用主要有三个

    1.序列化数据用于将模型序列化成JSON格式的对象,便于数据返回

    2.表单验证在表单请求中,用于验证用户上传的数据是否满足需要

    3.数据操作可用于数据更新、数据创建、数据保存等

    表单字段验证

    指定需要序列化的字段时,可设置字段类型、默认值、可读或可写、验证错误提示信息等,然后针对表单字段进行验证。表单字段验证有三种方式

    1.序列化字段,使用参数形式进行制定

    比如,字段name数据类型为字符串,max_length指定最大长度,必须输入,且使用error_message设置验证失败的提示信息

    1. #最大长度为50,required=True必须输入,
    2. name=serializer.CharField(max_length=50,
    3. required=True,
    4. error_messages={'required':'name必须传递'})

    2.重写validate(self,attrs)方法进行验证

    参数attrs包含所有字段,只需要自定义验证逻辑,如果不通过,则抛出serializers.ValidationError异常即可

    比如,验证name中必须包含关键字 【深圳】,否则抛出异常(代表验证失败)

    1. def validate(self,attrs):
    2. print(attrs)
    3. if '深圳' not in attrs.get('name'):
    4. raise serializers.ValidationError('名称中没有包含【深圳】,验证失败!')
    5. return attrs

    3.重写validate_字段名(self,value)方法,单独针对某个字段进行验证

    1. def validate_name(self,value):
    2. if '深圳' not in name:
    3. raise serializers.ValidationError('名称没有包含深圳,验证不通过')
    4. retrun name

    4.重写创建、更新方法

    update( self, instance, validated_data )    用于更新数据,将参数 validated_data 中的数据更新到 instance 中

    create(self, validated_data)      validated_data 作为关键字参数,用于创建模型

    1. class GoodsSerializer(serializers.Serializer):
    2. #自动生成的字段,只涉及读取的场景
    3. id=serializers.IntergerField(read_only=True)
    4. name=serializers.Charfield(max_length=50,
    5. required=True,
    6. error_message={
    7. 'required':'name参数必须要传递'})
    8. def update(self,instance,validated_data):
    9. '''
    10. 更新数据,将validate_data中的数据更新到instance中
    11. '''
    12. #修改数据
    13. instance.name=validated_data.get('name',instance.name)
    14. #保存更新
    15. instance.save()
    16. return instance
    17. def create(self,validated_data):
    18. '''
    19. 创建数据
    20. '''
    21. #Goods模型
    22. return Goods.objects.create(**validated_data)

  • 相关阅读:
    第23天中视频伙伴计划通过!分享本人心得,希望能帮到路上的你
    探索式测试的谬论
    VMware设置共享文件夹
    程序流程控制语句
    【test】文章测试
    测试人员的职业规划
    并查集总结
    mixup--学习笔记
    MES管理系统的生产模块与ERP有何差异
    Leetcode 142. 环形链表 II
  • 原文地址:https://blog.csdn.net/wolflxiaolu/article/details/126177737