序列化

django rest framework serializers

在最近的学习中,个人看法,serializers有以下几个作用:
   - 将queryset与model实例等进行序列化,转化成json格式,返回给用户(api接口)。
  - 将post与patch/put的上来的数据进行验证。
   - 对post与patch/put数据进行处理。
 (后面的内容,将用patch表示put/patch更新,博主认为patch更贴近更新的说法)
  简单来说,针对get来说,serializers的作用体现在第一条,但如果是其他请求,serializers能够发挥2,3条的作用!

用张图简单介绍:

serializers.fieild 

 我们知道在django中,form也有许多field,那serializers其实也是drf中发挥着这样的功能。我们先简单了解常用的几个field。

1. 常用的field
  CharField、BooleanField、IntegerField、DateTimeField这几个用得比较多,我们把外键的field放到后面去说!

# 举例子
mobile = serializers.CharField(max_length=11, min_length=11)
age = serializers.IntegerField(min_value=1, max_value=100)
# format可以设置时间的格式,下面例子会输出如:2018-1-24 12:10
pay_time = serializers.DateTimeField(read_only=True,format='%Y-%m-%d %H:%M')
is_hot = serializers.BooleanField()

  不同的是,我们在django中,form更强调对提交的表单进行一种验证,而serializer的field不仅在进行数据验证时起着至关重要的作用,在将数据进行序列化后返回也发挥着重要作用!
  我们可以看出,不同的field可以用不同的关键参数,除此之外,还有一些十分重要有用的参数

Core arguments参数

read_only:True表示不允许用户自己上传,只能用于api的输出。

如果某个字段设置了read_only=True,那么就不需要进行数据验证,只会在返回时,将这个字段序列化后返回 

举个栗子:在用户进行购物的时候,用户post订单时,肯定会产生一个订单号,而这个订单号应该由后台逻辑完成,而不应该由用户post过来,如果不设置read_only=True,那么验证的时候就会报错

order_sn = serializers.CharField(readonly=True)

write_only: 与read_only对应 
required: 顾名思义,就是这个字段是否必填。 
allow_null/allow_blank:是否允许为NULL/空 。 
error_messages:出错时,信息提示。

name = serializers.CharField(required=True, min_length=6,
                error_messages={
                    'min_length': '名字不能小于6个字符',
                    'required': '请填写名字'})

label: 字段显示设置,如 label=’验证码’
help_text: 在指定字段增加一些提示文字,这两个字段作用于api页面比较有用
style: 说明字段的类型,这样看可能比较抽象,看下面例子:

# 在api页面,输入密码就会以*显示
password = serializers.CharField(
style={'input_type': 'password'})
# 会显示选项框
color_channel = serializers.ChoiceField(
choices=['red', 'green', 'blue'],
style={'base_template': 'radio.html'}) 

这里面,还有一个十分有用的validators参数,这个我们会在后面提及! 

原文地址:https://www.cnblogs.com/xiaoqon/p/9835811.html