序列化器--Serializer

选项参数:

  • max_length 最大长度
  • min_length 最小长度
  • allow_blank 是否允许为空
  • trim_whitespace 是否截断空白字符
  • max_value 最小值
  • min_value 最大值

通项参数

  • read_only 该字段仅用于序列化输出,默认false
  • write_only 该字段仅用于反序列化输入,默认false
  • required 该字段在反序列化时必须输入,默认true
  • default 反序列化时使用的默认值
  • allow_null 该字段是否允许传入None,默认false
  • validators 该字段使用的验证器
  • error_messages 包含错误编号与错误信息的字典
  • label 用于HTML展示页面时,显示的字段名称
  • help_text 用于HTML展示页面时,显示的字段帮助提示信息

注意事项:

  1. 使用序列化器的时候一定要注意,序列化器声明了以后,不会自动执行,需要我们在视图中进行调用才可以。
  2. 序列化器无法直接接收数据,需要我们在视图中创建序列化器对象时把使用的数据传递过来。
  3. 序列化器的字段声明类似于我们前面使用过的表单系统。
  4. 开发restful api时,序列化器会帮我们把模型数据转换成字典.

drf提供的视图会帮我们把字典转换成json.或者把客户端发送过来的数据 转换字典

序列化器的使用

序列化器的使用分两个阶段:

  1. 在客户端请求时,使用序列化器可以完成对数据的反序列化。
  2. 在服务器响应时,使用序列化器可以完成对数据的序列化。

ModelSerializer组件

    ModelSerializer与常规的Serializer相同,但提供了
* 基于模型类自动生成一系列字段
* 基于模型类自动为Serializer生成validators,比如unique_together
* 包含默认的create()和update()的实现

定义

class BookInfoSerializer(serializes.ModelSerializer):
class Meta:
el=BookInfo
fields='__all__'

model指明参照哪个模型类

fields指明为模型类的哪些字段生成

我们可以在python manage.py shell中查看自动生成的BookInfoSerializer的具体实现

指定字段

使用fields来明确字段,__all__表示包含所有字段

使用exclude可以明确排除掉哪些字段

通过read_only_fields指明只读字段,仅用于序列化输出的字段

使用extra_kwargs参数为ModelSerialize添加或修改原有的选项参数

单表序列化总结

1)序列化与反序列功能可以整合成一个类,该类继承ModelSerializer

2)继承ModelSerializer类的资源序列化类,内部包含三部分

Meta子类、局部钩子、全局钩子

注:create和update方法ModelSerializer已经重写了,使用不需要重写

3)在Meta子类中:

用model来绑定关联的Model类

用fields来设置所有的序列化反序列化字段

用extra_kwargs来设置系统的校验规则

4)重要的字段校验规则:

read_only校验规则,代表该字段只参与序列化

write_only校验规则,代表该字段只参与反序列化

required校验规则,代表该字段在反序列化是是否是必填(True)还是选填(False),不能和read_only一起使用(规则冲突)

规则细节:

如果一个字段有默认值或是可以为空,没设置required规则,默认为False,反之默认值为True

如果一个Model字段即没有设置read_only也没设置write_only,该字段默认参与序列化及反序列化

5)自定义序列化字段:在Model类中,定义方法属性(可以返回特殊值,还可以完成连表操作),在序列化类的fields属性中可以选择性插拔

6)自定义反序列化字段:在Serializer类中,自定义校验字段,校验规则也只能在声明字段时设置,自定义的反序列化字段(如re_pwd),

必须设置write_only为True

既然选择了远方,只能风雨兼程

转载:https://www.cnblogs.com/lzss/p/11922448.html

DRF中serializer的中的模型字段解释的更多相关文章

  1. 008.Adding a model to an ASP.NET Core MVC app --【在 asp.net core mvc 中添加一个model (模型)】

    Adding a model to an ASP.NET Core MVC app在 asp.net core mvc 中添加一个model (模型)2017-3-30 8 分钟阅读时长 本文内容1. ...

  2. laravel 中with关联查询限定查询字段

    学习了下laravel5.6框架,果然很优雅,比如ActiveJieSuan model中作如下关联:(laravel模型关联关系可以查看https://laravelacademy.org/post ...

  3. Dubbo(五):Dubbo中的URL统一资源模型与Dubbo协议

    一.URL简介 URL也就是Uniform Resource Locator,中文叫统一资源定位符.Dubbo中无论是服务消费方,或者服务提供方,或者注册中心.都是通过URL进行定位资源的.所以今天来 ...

  4. ABAP 数据字典中的参考表和参考字段的作用

         ABAP数据字典中的参考表和参考字段的作用 大家最初在SE11中创建表和结构的时候都会遇到一个问题,如果设定了某个字段为QUAN或者CURR类型,也就是数量或金额的时候,总会要求输入一个参考 ...

  5. 提高安全性而在HTTP响应头中可以使用的各种响应头字段

    本文介绍在Web服务器做出响应时,为了提高安全性而在HTTP响应头中可以使用的各种响应头字段.由于部分浏览器中有可能对某些字段或选项不提供支持,所以在使用这些字段时请先确认客户端环境. X-Frame ...

  6. osg中使用MatrixTransform来实现模型的平移/旋转/缩放

    osg中使用MatrixTransform来实现模型的平移/旋转/缩放 转自:http://www.cnblogs.com/kekec/archive/2011/08/15/2139893.html# ...

  7. 聊聊 Linux 中的五种 IO 模型

    本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538919&idx=1&sn=6013c451 ...

  8. [Unity3D][Vuforia][IOS]vuforia在unity3d中添加自己的动态模型,识别自己的图片,添加GUI,播放视频

    使用环境 unity3D 5 pro vuforia 4 ios 8.1(6.1) xcode 6.1(6.2) 1.新建unity3d工程,添加vuforia 4.0的工程包 Hierarchy中 ...

  9. [置顶] c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date'

    c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date' ...

  10. 获取sqlserver数据库中所有库、表、字段名的方法

    获取sqlserver数据库中所有库.表.字段名的方法 2009年03月12日 星期四 下午 12:51 1.获取所有数据库名: SELECT Name FROM Master..SysDatabas ...

随机推荐

  1. format( )函数

    在Python中,DETAIL_URL.format(id=id) 是一个字符串格式化的表达式.它通常用于根据一个已定义的字符串模板 DETAIL_URL 来生成一个新的字符串.在这个模板中,会包含一 ...

  2. Service Mesh技术详解

    深入探讨Service Mesh的基本概念和核心技术,涵盖了服务发现.负载均衡.断路器与熔断机制,以及数据平面与控制平面的详细工作原理和实现方法. 关注作者,复旦博士,分享云服务领域全维度开发技术.拥 ...

  3. python爬虫-xpath基础

    # 准备一个html格式文档 doc = ''' <div> <ul> <li class="item-0"><a href=" ...

  4. FPGA案例开发手册——基于全志T3+Logos FPGA核心板

    前 言 本文档主要提供评估板FPGA端案例测试方法,适用的开发环境为Windows 7 64bit和Windows 10 64bit. 本文案例基于创龙科技的全志T3+Logos FPGA核心板,它是 ...

  5. Java反射机制原理详解

    什么是反射? Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法.本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息 ...

  6. Kafka消费端抛出异常Offset commit cannot be completed since the consumer is not part of an active group for auto partition assignment; it is likely that the consumer was kicked out of the group的解决方案

    总结/朱季谦 在一次测试Kafka通过consumer.subscribe()指定偏移量Offset消费过程中,因为设置参数不当,出现了一个异常提示-- [2024-01-04 16:06:32.55 ...

  7. 洛谷P1832

    #include<iostream> #include<utility> using namespace std; typedef long long ll; #define ...

  8. MobaXterm是一款功能强大的远程SSH利器,是您远程计算机的终极工具箱

    MobaXterm 是一款功能强大的远程终端应用,可以用于 Windows 系统上的 SSH.Telnet.RDP.VNC 等远程登录.它支持多种会话类型,拥有强大的终端功能,还支持 X11 图形界面 ...

  9. IntersectionObserver 实现图片懒加载

    背景 最近使用express做导航类型网站,因为这个是后端jade渲染,浏览器拿到页面之后,解析出来dom结构,导致100+的图片瞬间加载,严重浪费了宽带资源,加重服务器负担,因此打算延迟加载图片 模 ...

  10. vue中sass与SCSS的区别

    在Vue中,通常使用SCSS(Sassy CSS)而不是Sass来编写样式.SCSS是Sass的一种语法扩展,提供了更多的功能和灵活性,因此在Vue项目中更常见.下面是Sass和SCSS之间的主要区别 ...