7.10.serializer和validator验证

serializers

作用

  1. 控制返回体中包括哪些字段

  2. 检验请求体中字段的有效性,当校验失败时返回错误信息

  3. 数据格式转换

    序列化:允许将复杂对象序列化为易于渲染成JSON、XML原生python数据类型

    反序列化:在数据校验通过后,将json、xml等数据反序列化为复杂对象

类型

serializers

控制返回体中包括哪些字段

class GoodsCategorySerializer(serializers.Serializer):
    name = serializers.CharField()
    code = serializers.CharField()
    desc = serializers.CharField()
    category_type = serializers.IntegerField()

检验请求体中字段的有效性,当校验失败时返回错误信息

自定义创建和更新逻辑

modelSerializer

ModelSerializer简化了Serializer的使用,但存在一定的局限性。比如Model中要求必须存在的字段而Form中没有;再比如Form中需要校验的字段而Model中没有

控制返回体中包括哪些字段

goods/serializer.py

若需要取出所有字段使用fields = '__all__'

检验请求体字段,当校验失败时返回错误信息

详见:《validator校验器》小节

常见问题

GET请求:如何向response中添加model中没有的数据?

参见Django-drf给序列化对象添加额外字段信息arrow-up-right

POST请求:如何向表单中添加额外的数据?

同Serializer,使用code = serializers.CharField()的方式声明额外数据, 并向fields中添加

示例:User中没有code字段,向注册表单中添加code字段的方法如下:

POST请求:某些字段表单中存在,但表单存储后不想返回怎么办?

使用write_only=True声明该字段仅允许被写入,如下:

完整示例

validator校验器

校验规则可能来自model或serializer

Last updated