序列化器--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. Navicat Premium v16.0.6 绿色破解版

    这里版本:Navicat Premium v16.0.6.0 ,这个是绿色版,不需要安装,启动Navicat.exe即可用 破解工具:NavicatKeygenPatch(其它版本也能破解) 1.下载 ...

  2. TCP三次握手和四次挥手全过程

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立连接: SYN:同步标志.该标志仅在三次握手建立TCP连接时有效. ACK:确认标志.同时提示远端系统已经成功接收所有数据 ...

  3. SqlServer 使用 case when 实现行转列,并创建视图表查询

    其实是个很简单的操作了,但长时间不用有点忘记了,正好项目上遇到这样的需求便把过程记录了下来. 一 需求描述 将河道水情表 结构如下,现在需要将水位Z字段由行展示转换为列展示.查询结果为展示时间和每个测 ...

  4. Linux 提权-SUID/SGID_2

    本文通过 Google 翻译 SUID | SGID Part-2 – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释 ...

  5. Servlet之Request和Response的快速上手

    阅读提示: 前置内容 MyBatis知识点总结 HTTP和Servlet入门 目录 1.Request和Response概述 2.Request对象 2.1 Request继承体系 2.2 Reque ...

  6. SpringBoot 1.x 2.x配置文件指定服务项目名

    SpringBoot版本1.x: server.context-path=/demo SpringBoot版本2.x: server.servlet.context-path=/demo

  7. ABC348

    A link 这道题就先输出整个的\(oox\),再输出剩一个两个的. 点击查看代码 #include<bits/stdc++.h> using namespace std; int n; ...

  8. BTC 地址

    比特币地址(Bitcoin Address)是用于接收和发送比特币的唯一标识符,类似于传统金融系统中的银行账号.一个比特币地址由一串字母和数字组成,通常以1.3或bc1开头,具体长度为26至35个字符 ...

  9. 微服务:gateway

    网关路由: 1.创建新模块 2.引入网关依赖 <!--网关--> <dependency> <groupId>org.springframework.cloud&l ...

  10. 支付宝退款和结果查询接口简单实现(.Net 7.0)

    〇.前言 支付宝对 .Net 的支持还是比较充分的,在每个接口文档中都有关于 C# 语言的示例,这样就大大降低了对接的难度,很容易上手. 官方接口文档地址:退款-alipay.trade.refund ...