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瞭望】,【…

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

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

图灵日记之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…

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

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

分割时间方法

输入开始时间和结束时间以及时间间隔, 并以数组形式输出其中的时间段 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…

drf知识--05

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

ElasticSearch 使用映射定义索引结构

动态映射 dynamic 可选值解释true默认值,启用动态映射,新增的字段会添加到映射中runtime查询时动态添加到映射中false禁用动态映射,忽略未知字段strict发现未知字段,抛出异常 显示映射 创建映射 PUT user {"mappings&qu…

Elasticsearch可视化平台Kibana [ES系列] - 第498篇

历史文章(文章累计490) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 全…

three.js后处理(发光描边OutlinePass描边样式

效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"></div>&…

圆通速递查询,圆通速递单号查询,对需要的单号记录进行标记

随着网购的普及&#xff0c;快递服务已经深入到我们生活的方方面面,我们每天都需要处理大量的快递信息,为了更高效地管理这些信息&#xff0c;【快递批量查询高手】应运而生。 所需工具&#xff1a; 一个【快递批量查询高手】软件 圆通速递单号若干 操作步骤&#xff1a; …

不同参数规模大语言模型在不同微调方法下所需要的显存总结

原文来自DataLearnerAI官方网站&#xff1a; 不同参数规模大语言模型在不同微调方法下所需要的显存总结 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051703254378255 大模型的微调是当前很多人都在做的事情。微调可以让大语言模型适应特定领域的任…

IntelliJ IDEA快捷键及调试

文章目录 一、IntelliJ IDEA 常用快捷键一览表1-IDEA的日常快捷键第1组&#xff1a;通用型第2组&#xff1a;提高编写速度&#xff08;上&#xff09;第3组&#xff1a;提高编写速度&#xff08;下&#xff09;第4组&#xff1a;类结构、查找和查看源码第5组&#xff1a;查找、…

05|提示工程(下):用思维链和思维树提升模型思考质量 ## 什么是 Chain of Thought

05&#xff5c;提示工程&#xff08;下&#xff09;&#xff1a;用思维链和思维树提升模型思考质量 什么是 Chain of Thought CoT 这个概念来源于学术界&#xff0c;是谷歌大脑的 Jason Wei 等人于 2022 年在论文《Chain-of-Thought Prompting Elicits Reasoning in Large La…

使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理

1、通用的业务编码规则的管理功能 在前面随笔我们介绍了一个通用的业务编码规则的管理功能&#xff0c;通过代码生成工具Database2Sharp一步步的生成相关的后端和Winform、WPF的界面&#xff0c;进行了整合&#xff0c;通过利用代码生成工具Database2sharp生成节省了常规功能的…