序列化
Posted xiaoqon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化相关的知识,希望对你有一定的参考价值。
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参数,这个我们会在后面提及!
以上是关于序列化的主要内容,如果未能解决你的问题,请参考以下文章