zoukankan      html  css  js  c++  java
  • 序列化

    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参数,这个我们会在后面提及! 

  • 相关阅读:
    查询避免Unknown column ‘xxx’ in ‘where clause
    Spring依赖循环:The dependencies of some of the beans in the application context form a cycle
    POJ(北京大学)刷题导航
    ACM使用Java提交总是超时的解决方法
    申请了服务器,建立了新博客。 不在用这个了。
    jeecg数据库添加字段后表单的修改
    jeecg普通表和数据字典的关联
    jeecg添加滚动图
    jeecg定时任务的bug记录
    classpath究竟是指哪里?
  • 原文地址:https://www.cnblogs.com/xiaoqon/p/9835811.html
Copyright © 2011-2022 走看看