Django之DRF框架三,序列化组件

一、序列化类的常用字段和字段参数

常用字段

字段名字段参数
CharFieldmax_length=None, min_length=None, allow_blank=False, trim_whitespace=True
IntegerFieldmax_value=None, min_value=None
FloatFieldmax_value=None, min_value=None
BooleanField
NullBooleanField
FloatFieldmax_value=None, min_value=None
DecimalFieldmax_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None 注:max_digits: 最多位数 decimal_palces: 小数点位置
TimeFieldformat=api_settings.TIME_FORMAT, input_formats=None
DateFieldformat=api_settings.DATE_FORMAT, input_formats=None
DateTimeFieldformat=api_settings.DATETIME_FORMAT, input_formats=None)
EmailFieldmax_length=None, min_length=None, allow_blank=False
RegexFieldregex, max_length=None, min_length=None, allow_blank=False
SlugFieldmax_length=50, min_length=None, allow_blank=False),正则字段,验证正则模式 [a-zA-Z0-9-]+
URLFieldmax_length=200, min_length=None, allow_blank=False
UUIDFieldformat=’hex_verbose’) format: 1) ‘hex_verbose’ 如"5ce0e9a5-5ffa-654b-cee0-1238041fb31a" 2) ‘hex’ 如 “5ce0e9a55ffa654bcee01238041fb31a” 3)‘int’ - 如: “123456789012312313134124512351145145114” 4)‘urn’ 如: “urn:uuid:5ce0e9a5-5ffa-654b-cee0-1238041fb31a”
IPAddressFieldprotocol=’both’, unpack_ipv4=False, **options)
DurationField
ChoiceFieldchoices,choices与Django的用法相同
MultipleChoiceFieldchoices
FileFieldmax_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL
ImageFieldmax_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL
ListFieldchild=, min_length=None, max_length=None
DictFieldchild=

常用字段参数

CharField及子类的(EmailField)
反序列化的校验,字段自己的规则

参数含义
max_length最大长度
min_lenght最小长度
allow_blank是否允许为空
trim_whitespace是否截断空白字符

IntegerField

参数含义
max_value最小值
max_value最大值

字段共有参数

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

二、序列化高级用法之source(了解)

首先先创建一个django项目,创建book表、publish表、以及author表,并建立三个表之间的关系,完成模型表数据的迁移并录入数据

from django.db import models# Create your models here.class Book(models.Model):name = models.CharField(max_length=32)price = models.DecimalField(max_digits=5, decimal_places=2)# 外键字段书与出版社一对多,关联字段在多的一方publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE)# 书与作者多对多,需要创建中间表,使用全自动创建第三张表authors = models.ManyToManyField(to='Author')class Publish(models.Model):name = models.CharField(max_length=32)addr = models.CharField(max_length=64)class Author(models.Model):name = models.CharField(max_length=32)phone = models.IntegerField()

在这里插入图片描述

序列化字段名

sourse

  • 可以定制序列化字段名
  • 防止数据被人篡盗,将前端展示的字段名和后端数据的字段名设置成不同的字段名

sourse序列化自有字段和关联字段的区别

1.自有字段,直接写表字段名
publish_name = serializers.CharField(max_length=12, min_length=3, required=True, allow_blank=True,source='name')2.还可以直接映射方法
models.py
class Publish(models.Model):name = models.CharField(max_length=32)addr = models.CharField(max_length=64)def sb_name(self):return self.name+'sb'serializer.py
publish_name = serializers.CharField(max_length=12, min_length=3, required=True, allow_blank=True,source='sb_name')3.关联字段  通过外键获取一对多  一对多的关联,直接点publish=serializers.CharField(max_length=8,source='publish.name')多对多  source不能用实现定制序列化关联表的字段authors = serializers.CharField(source='authors.all')

作业之装饰器

def outer(func):def inner(request, *args, **kwargs):try:request.data = json.loads(request.body)  # 如果json格式不可以序列化loadsexcept Exception as e:request.data = request.POSTif request.method == 'PUT':body_in = str(request.body, encoding='utf-8')  # 转 译body_in = parse.unquote(body_in)# request.data = {i.split('=')[0]: i.split('=')[1] for i in body_in.split('&')}  # 字典推导式# 笨方法d = {}sp_1 = body_in.split('&')for i in sp_1:k, v = i.split('=')d[k] = vrequest.data = dres = func(request, *args, **kwargs)return resreturn inner@outer
def index(request):print(request.data)return JsonResponse({'code': '请求成功'})该装饰器只针对视图函数,如果要装饰在类的方法上就需要添加形参中添加self参数

作业之用户一次性提交数据

views.pyfrom .serializer import AuthorSerializerclass AuthorView(APIView):def post(self, request):ser = AuthorSerializer(data=request.data)if ser.is_valid():ser.save()return Response({'code': 100, 'msg': '创建成功'})else:return Response({'code': 100, 'msg': ser.errors})
serializer.pyclass AuthorSerializer(serializers.ModelSerializer):telephone = serializers.CharField()birthday = serializers.CharField()addr = serializers.CharField()class Meta:model = Authorfields = ['name', 'age', 'telephone', 'birthday', 'addr']def create(self, validated_data):  # 因为author表里没有authordetail其它三个字段,需要重写telephone = validated_data.pop('telephone')birthday = validated_data.pop('birthday')addr = validated_data.pop('addr')# 先创建作者详情,在创建作者,因为外键字段的约束,是现有作者详情,再有作者约束author_detail = AuthorDetail.objects.create(telephone=telephone, birthday=birthday, addr=addr)validated_data['author_detail'] = author_detailauthor = Author.objects.create(**validated_data)return author

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/577202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【隐私保护】使用Python从文本中删除个人信息:第一部分

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

linux中主从复制的架构和读写分离的方式

读写分离 互相主从架构注意点 双主双从架构注意点 一主多从架构注意点 读写分离概念部署jdk环境上传文件,解压文件配置环境变量 部署mycat环境mycat配置文件给所有数据库创建访问用户配置 server.xml配置 schema.xml负载均衡测试 互相主从 架构 iproleip1ip2的主库…

【开源】基于JAVA语言的大学生相亲网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询会员4.2 查询相亲大会4.3 新增留言4.4 查询新闻4.5 新增新闻 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的大学生相亲网站,包含了会员管理模块、新闻管…

如何使用GPT4写一篇综述

使用 GPT-4 或任何其他高级语言模型来撰写一篇综述文章,需要遵循一系列的步骤来确保内容的准确性、深度和组织性。以下是一些指导步骤: 确定主题和范围 明确你想要综述的主题。这可以是一个科学领域的特定方面、技术发展、理论进展等。 确定综述的范围和…

管理类联考和普通考研区别有哪些?对比分析!

在当今社会,越来越多的大学生选择继续深造,提升自己的学历和能力。其中,管理类联考和考研是两个常见的选择。然而,许多人对于这两者的区别并不了解,因此在选择的时候往往会感到困惑。本文将详细介绍管理类联考和考研区…

图灵日记之java奇妙历险记--输入输出方法数组

目录 输入输出输出到控制台从键盘输入使用 Scanner 读取字符串/整数/浮点数使用 Scanner 循环读取 猜数字方法方法定义方法调用的执行过程实参和形参的关系(重要)方法重载 数组数组的创建数组的初始化动态初始化静态初始化 数组的使用元素访问遍历数组 数组是引用类型null数组应…

龙芯杯个人赛串口——做一个 UART串口——RS-232

文章目录 Async transmitterAsync receiver1. RS-232 串行接口的工作原理DB-9 connectorAsynchronous communicationHow fast can we send data? 2.波特率时钟生成器Parameterized FPGA baud generator 3.RS-232 transmitter数据序列化完整代码: 4.RS-232 receiver…

CEC2013(python):六种算法(RFO、PSO、CSO、WOA、DBO、ABC)求解CEC2013

一、六种算法简介 1、红狐优化算法RFO 2、粒子群优化算法PSO 3、鸡群优化算法CSO 4、鲸鱼优化算法WOA 5、蜣螂优化算法DBO 6、人工蜂群算法 (Artificial Bee Colony Algorithm, ABC) 二、6种算法求解CEC2013 (1)CEC2013简…

一篇讲透:箭头函数、普通函数有什么区别

前言 📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步! 🍅 个人主页:南木元元 目录 什么是箭头函数 箭头函数和普通函数的区别 更简洁的语法 箭头函数…

Rancher小白学习之路

官网:http://docs.rancher.cn/docs/rancher1/rancher-service/load-balancer/_indexhttp://docs.rancher.cn/docs/rancher1/rancher-service/load-balancer/_indexRancher2.5集群搭建&K3S生产环境搭建手册 - 知乎 【rancher教程】十年运维大佬两小时带你搞定ran…

西南科技大学计算机网络实验一 (Wireshark使用入门与HTTP协议分析)

一、实验目的 学习和掌握网络抓包和协议分析软件Wireshark的基本使用;利用Wireshark软件进行HTTP协议分析。 二、实验环境 与因特网连接的计算机网络系统;主机操作系统为windows;Wireshark、IE等软件。 三、实验内容 Wireshark的安装与界面的熟悉; Wireshark进行分组捕…

模板方法模式(Template Method)

模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个操作中的算法的框架,将一些步骤延迟到子类中实现。这样,子类可以在不改变算法结构的情况下重新定义算法的某些特定步骤。 模板方法模式通常涉及以下两个角色: 抽象类(Abstract Class):定义模板…

C# 抽象类与接口

抽象类和接口是C#“封装、继承、多态”三大特性中比较重要的组成部分。抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象的基类,贡献某些主要的特性,例如共同的目的和结构。接口则主要是用于类,为这些类去添加不同的方法&#…

Order Delivery for WooCommerce电商商城订单一体化交付解决方案

Order Delivery for WooCommerce电商商城订单一体化交付解决方案 Order Delivery for WooCommerce电商商城订单一体化交付解决方案使客户可以在结账过程中轻松选择订单的交付日期和时间。 Order Delivery for WooCommerce电商商城订单一体化交付解决方案 让您的客户以流畅且…

数据库原理及应用·关系数据库设计理论

5.1 数据依赖 5.1.1 关系模式中的函数依赖 函数依赖的概念:设X,Y是关系R的两个属性集合,当任何时刻R中的任意两个元组中的X属性值相同时,则它们的Y属性值也相同,则称X函数决定Y,或Y函数依赖于X,记为X→Y。…

分割时间方法

输入开始时间和结束时间以及时间间隔, 并以数组形式输出其中的时间段 const generateTimeSlots (startHour: number, endHour: number, intervalMinutes: number) > {const slots [];let currentTime new Date().setHours(startHour, 0, 0, 0);const endTime…

redis—String字符串

目录 前言 1.字符串数据类型 2.常见命令 3.典型应用场景 前言 字符串类型是Redis最基础的数据类型,关于字符串需要特别注意: 1)首先Redis中所有的键的类型都是字符串类型,而且其他几种数据结构也都是在字符串类似基础.上构建的,例如列表…

【2024 行人重识别最新进展】ReID3D:首个关注激光雷达行人 ReID 的工作!

【2024 行人重识别最新进展】ReID3D:首个关注激光雷达行人 ReID 的工作! 摘要:数据集:方法模型:多任务预训练:ReID Network: 实验结果:结论: 来源:Arxiv 2023…

图像分割算法

(车载)毫米波雷达的静止“目标”滤除问题 https://blog.csdn.net/xhblair/article/details/130849777 车载与体征/手势检测 毫米波雷达信号处理流程 csdn链接 专利-一种基于FPGA的步进频高分辨近程雷达探测系统和方法与流程 https://www.xjishu.com/zhuanli/52/2022114681…

drf知识--05

两个视图基类 # APIView:之前一直在用---》drf提供的最顶层的父类---》以后所有视图类,都继承自它 # GenericAPIView:继承自APIView--》封装 继承APIView序列化类Response写接口 # urls.py--总路由 from django.contrib import admin from dj…