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.rhkb.cn/news/224445.html

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

相关文章

sql_lab之sqli注入中的cookie注入

Cookei注入(gxa的从cookei注入) 1.打开控制台 2.验证id2时的值 document.cookie"id2" 3.判断是上面闭合方式 document.cookie"id2 -- s" 有回显 说明是’单引号闭合 4.用order by 判断字段数 5.用联合查询判断回显点 接下来的…

复分析——第1章——复分析准备知识(E.M. Stein R. Shakarchi)

第一章 复分析准备知识 (Preliminaries to Complex Analysis) The sweeping development of mathematics during the last two centuries is due in large part to the introduction of complex numbers; paradoxically, this is based on the seemingly absurd no…

python三大开发框架django、 flask 和 fastapi 对比

本文讲述了什么启发了 FastAPI 的诞生,它与其他替代框架的对比,以及从中汲取的经验。 如果不是基于前人的成果,FastAPI 将不会存在。在 FastAPI 之前,前人已经创建了许多工具 。 几年来,我一直在避免创建新框架。首先&…

python dash 的学习笔记1

dash 用python开发web界面 https://dash.plotly.com/ 官方上支持jula F# python一类。当然我只会python只学习python中使用dash. 要做一个APP,用php,java以及.net都可以写,只所有选择python是因为最近在用这一个。同时也发现python除了慢全是优点。 资料…

Redis缓存常见问题之预热、雪崩、击穿、穿透

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…

MongoDB数据库本地部署并结合内网穿透实现navicat公网访问

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

处理etcd源码包编译异常

1、下载etcd包,执行go build报异常: client\v2\example_keys_test.go:1:1: expected package, found . client\v3\example_auth_test.go:1:1: expected package, found . client\v3\concurrency\example_election_test.go:1:1: expected package, found…

大语言模型说明书

在浩瀚的信息宇宙中,大语言模型如同一颗璀璨的星星正在熠熠生辉。21世纪以来,人工智能可谓是飞速发展,从简单的神经网络到大语言模型、生成式AI,这并非仅仅是一种技术的进步,更是人类智慧的飞跃。大语言模型不仅仅是语…

CGAL的3D Alpha Shapes

假设我们给定一个二维或三维的点集S,我们希望得到类似“这些点形成的形状”的东西。这是一个相当模糊的概念,可能有许多可能的解释,阿尔法形状就是其中之一。阿尔法形状可用于从密集的无组织数据点集进行形状重建。事实上,阿尔法形…

2023年最新版的linux运维面试题(二)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录 写在前面 11. LVS三种负载均衡模式的比较 12…

需求分析工程师岗位的职责描述(合集)

需求分析工程师岗位的职责描述1 职责: 1,负责需求调研,对需求进行分析,编写解决方案、需求规格说明书等 2,根据需求制作原型,并负责原型展示以及客户沟通等工作 3,负责向技术团队精确地传达业务…

数据挖掘-11-利用python进行信用卡欺诈检测(包含数据代码)

文章目录 0. 数据代码下载1. 项目介绍1.1 背景描述1.2 常见信用卡欺诈使用的情况有:1.3 数据描述a. 数据集内容b. 属性描述c. 注意 2. 提出问题3. 数据预处理3.1 加载数据3.2 查看数据类型,是否需要做数据转换处理3.3 对数据进行简单的统计,检…

跨平台Markdown编辑软件Typora mac功能介绍

Typora mac是一款跨平台的Markdown编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。Typora Mac版除了支持常见的Markdown语法外&#x…

线程的同步与互斥

抢票的例子 竞争过程 进程A被切走 进程B被切走 结论: 互斥 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); mutex: 指向要初始化的互斥锁的指针。attr: 用于设置互斥锁属性的指针,通常可以传入 NULL 以使用默认属性…

react 路由v6

这里是区别:V5 vs V6 这里是官网:可以查看更多高级属性 一、基本使用: 1、配置文件 src/routes/index import React from "react";const Home React.lazy(() > import("../Pages/Home")); const About React.laz…

Spring之国际化:i18n

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

【强化学习】PPO:近端策略优化算法

近端策略优化算法 《Proximal Policy Optimization Algorithms》 论文地址:https://arxiv.org/pdf/1707.06347.pdf 一、 置信域方法(Trust Region Methods) ​ 设 π θ o l d \pi_{\theta_{old}} πθold​​是先前参数为 θ o l d \theta_{old} θold​的策略网…

Java@RequestParam注解和@RequestBody注解接收参数

目录 Java后端接收数据 第一章、后端不写任何注解情况下接收参数1.1)后端不写注解postman发出get请求1.2)后端不写注解postman发出post请求 第二章、后端写RequestParam注解接收参数2.1)postman发出post请求2.2)postman发出get请求…

docker-compose 安装Sonar并集成gitlab

文章目录 1. 前置条件2. 编写docker-compose-sonar.yml文件3. 集成 gitlab4. Sonar Login with GitLab 1. 前置条件 安装docker-compose 安装docker 创建容器运行的特有网络 创建挂载目录 2. 编写docker-compose-sonar.yml文件 version: "3" services:sonar-postgre…

【计算机网络】网络层——IP协议

目录 一. 基本概念 二. 协议报文格式 三. 网段划分 1. 第一次划分 2. CIDR方案 3. 特殊的IP地址 四. IP地址不足 1. 私有IP和公网IP 2. DHCP协议 3. 路由器 4. NAT技术 内网穿透(NAT穿透) 五. 路由转发 路由表生成算法 结束语 一. 基本概念 IP指网络互连协议…