05-Django REST framwork 板块(06-序列化)

JWT浅析 文章目录一、概念二、背景分析1.传统基于`session`的会话管理/认证a. `session`基本认知b. `session`的认证方式暴露的问题2. 基于token的会话管理/认证三、主角`JWT`1. jwt基本结构A .头部 headerB. 负载 payloadC. 签证/签名 signature2.使用3. jwt优缺点分析4. jwt的引申扩展 一、概念 Json web tok... 阅读详情

6. 序列化

两大功能:
1. 对请求数据的验证
2. 对querset进行序列化

一.序列化:

利用ser.data获得经过序列化得到的数据,ser为经过数据库查询得到的query对象(ret = models.Role.objects.all())

1.写类

两种基本写法:from rest_framework.serializers import ...

一种继承自Serializer,
第二种继承自ModelSerializer,自动数据库表里边,自动生成Serializer的字段

class RolesSerializer(serializers.Serializer):
	id = serializers.IntegerField()
	title = serializers.CharField()

class UserInfoSerializer(serializers.ModelSerializer):
	class Meta:
		model = models.UserInfo
		# fields = "__all__"  # 可以自动生成所有字段,但是默认拿的都是最基本的
		fields = ['id','username','password',]  # 写数据库的字段
2.字段

a.

title = serializers.CharField(source="xxx.xxx.xx.xx")
重点:获取choice字段显示
  1. source为对应数据库的字段名称,这样前边的title就可以随便定义了

  2. source针对如含choice等字段,可以执行get_字段名_display 方法 进行显示,如source='get_usertype_display'

  3. source针对外键等情况,可以使用 xx.属性名,进行调用,如:source='group.id'

  4. 当要查的不只是一个数据,可以用SerializerMethodField进行自定义显示,可以定义一个
    以 get_ 开头的方法/函数,函数返回什么,就显示什么(如下:get_rls)

b.


  title = serializers.SerializerMethodField()
  class UserInfoSerializer(serializers.ModelSerializer):
	rls = serializers.SerializerMethodField()  # 自定义显示
	haha = serializers.CharField(source='get_usertype_display')
	class Meta:
		model = models.UserInfo
		# fields = "__all__"  # 可以自动生成多有字段,但是默认拿的都是最基本的
		# 可以跟自定义的字段,混合着中。对于额外数据也可以depth进行深度提取,拿到更多数据
		# 对于有格外操作的,可以定义上边单独字段,然后添加到files中
		fields = ['id','username','password','rls','haha'] 
	 
	# 自定义方法
	def get_rls(self, row):
		role_obj_list = row.roles.all()

		ret = []
		for item in role_obj_list:
			ret.append({'id':item.id,'title':item.title})
		return ret

c. 自定义类

  • 可以继承CharFiled等字段,进行自己的再封装。用的不多
3. 自动序列化连表、深度depth
class UserInfoSerializer(serializers.ModelSerializer):
	class Meta:
		model = models.UserInfo
		# fields = "__all__"
		fields = ['id','username','password','group','roles']  #可对应添加含字段的字段名称
		depth = 1 # 官方建议0 ~ 10(取数据的深度,如果只拿到数据ID,可以再往深的取对应的描述文字)
		# 层数越深,数据越多,检索越多,影响性能,平时到3已经很大了  
4. 生成链接(反向解析)

url(r'^(?P<version>[v1|v2])/group/(?P<xxx>\d+)$',views.GroupView.as_view(),name='gp')

class UserInfoSerializer(serializers.ModelSerializer):
	group = serializers.HyperlinkedIdentityField(view_name='gp',lookup_field='group_id',lookup_url_kwarg='xxx')
		# view_name   >>   url处的别名
		# lookup_field  >>  url中的xxx匹配的内容,针对数据库中所要查询字段的索引值
		# lookup_url_kwarg  >>  取url中正则匹配的名字
	class Meta:
		model = models.UserInfo
		# fields = "__all__"
		fields = ['id','username','password','group','roles']
		depth = 0 

class UserInfoView(APIView):
	def get(self,request,*args,**kwargs):

		users = models.UserInfo.objects.all()

		ser = UserInfoSerializer(instance=users,many=True,context={'request': request})
		ret = json.dumps(ser.data, ensure_ascii=False)
		return HttpResponse(ret)
		

源码:

对象, Serializer类处理;
QuerySet,ListSerializer类处理;
# serializer.data

2.请求数据校验:

对request请求过来的数据进行验证,比如不允许传空值,然后根据校验规则进行相应。如:发{"pwd":""},经过验证返回{"pwd":["标题不能为空"]}


class XXValidator(object):
	def __init__(self, base):
		self.base = base

	def __call__(self, value):
		if not value.startswith(self.base):
			message = '标题必须以 %s 为开头。' % self.base
			raise serializers.ValidationError(message)

	def set_context(self, serializer_field):
		"""
		This hook is called by the serializer instance,
		prior to the validation call being made.
		"""
		# 执行验证之前调用,serializer_fields是当前字段对象
		pass

class UserGroupSerializer(serializers.Serializer):
    # 基于title这个字段名进行,验证;
    # 就是说请求数据,必须需包含'title',并且不能为空
	title = serializers.CharField(error_messages={'required':'标题不能为空'},validators=[XXValidator('老男人'),])
		# error_messages={'required':'标题不能为空'}  #自定义出错的信息
		# validators=[XXValidator('老男人'),]  #自定义验证规则(上边的XXValidator)
class UserGroupView(APIView):

	def post(self,request,*args,**kwargs):

		ser = UserGroupSerializer(data=request.data)  #做校验时,传入请求数据
		if ser.is_valid():
			print(ser.validated_data['title'])
		else:
			print(ser.errors)

		return HttpResponse('提交数据')
		

问: 自定义验证规则时,需要钩子函数?请问钩子函数如何写?

答:从is_vaild()方法开始找源码,注意self要先从自己定义的类进行查找,然后在一步步深入。

告别抓包失败!保姆级配置:让Burp+Proxifier稳定抓取任意微信小程序 本文提供了一套完整的Burp+Proxifier配置方案,确保稳定抓取微信小程序数据。从环境准备、工具选型到Burp Suite深度配置和Proxifier精准设置,详细解决了证书安装、进程捕获和乱码解析等核心问题,帮助开发者告别抓包失败,提升调试效率。 阅读详情

相关推荐

R语言dlnm包避坑指南:手把手教你配置交叉基矩阵(附温度分层与滞后多项式设置)

本文详细介绍了R语言dlnm包在配置交叉基矩阵时的实用技巧与避坑指南,特别针对温度分层与滞后多项式设置提供了具体参数配置建议。通过解析`crossbasis()`函数的核心参数、温度分析的分层策略以及不同基函数的适用场景,帮助研究者高效构建分布滞后非线性模型,避免常见错误并优化模型性能。

weixin_34094282的博客 401

session与cookie

网络请求中的cookie与set-Cookie的交互模式和作用 文章目录网络请求中的cookie与set-Cookie的交互模式和作用1.当很多人访问统一个网服务器,服务器如何来区分不同的用户呢?2.我们经常说浏览器关闭后session就会被清除,那session有生命周期么?3.cookie会被缓存,sessionid保存在cookie中,sessionid一定会被清除么?4.cookie保存用...

AggressionStorm的博客 37万+

避坑指南:将大华官方Java SDK无缝迁移到SpringBoot 2.x项目的完整流程

本文详细介绍了如何将大华官方Java SDK无缝迁移到SpringBoot 2.x项目,重点解决内存管理、连接池设计和异步处理等核心问题。通过设备连接池化、异步非阻塞接口改造和内存管理优化,实现刷卡、刷脸等认证功能的高效整合,提升Web服务的稳定性和性能。

weixin_42557830的博客 417

Django中间件Middleware

文章目录django中间件一、中间件详细分析1.django配置文件`settings.py`2.自定义中间件`middleware.py`3.注意事项:4.看图分析二、简化版,以及参数分析三、应用实例 django中间件 一、中间件详细分析 1.django配置文件settings.py # settings.py MIDDLEWARE = [ 'django.middleware.se...

AggressionStorm的博客 29万+

使用Python进行核磁数据预处理

随着医学与人工智能技术的快速崛起,伴随算法算力、数据等关键要素的积累和突破,人工智能技术在精准医学领域的科研应用也随之飞快增长,相关科研成果和学术论文数量逐年激增,医学影像人工智能涉及的技术如图像分割、病灶识别、病灶自动勾画、影像组学、深度学习模型构建和临床信息解析越来越趋于分析流程化,模块化,帮助越来越多的医生在临床科研实践中获得突破性的进展。根据具体的应用和数据类型,你可能需要调整或添加额外的步骤。对于更高级的处理,如图像分割或NMR数据的复杂处理,你可能需要查阅更专业的文献或使用更专业的软件工具。

xhlo521的博客 3132

S参数反演法

等效介质理论模型— 利用S参数反演法提取超材料结构的等效参数 等效介质理论模型—利用S参数反演法提取超材料结构的等效参数 S参数反演法,即利用等效模型的传输矩阵和S参数求解超材料结构的等效折射率n和等效阻抗Z的过程。本文对等效介质理论模型进行了详细介绍,并提供对应代码。 超材料的传输矩阵 超材料结构的传输矩阵函数为: 其中,d 为等效光学活性材料的厚度,n 为折射率,Z 表示阻抗。 S参数和传输矩阵T 超材料结构的S参数和传输矩阵T满足下列方程: 利用以上两式,可以得到等效折射率n和相对阻抗的表达式

weixin_43962864的博客 1万+

数据库加锁,乐观锁、悲观锁

文章目录一、概念悲观锁(Pessimistic Lock)乐观锁(Optimistic Lock)使用场景二、具体实现方式sql层面Django层面 一、概念 悲观锁(Pessimistic Lock) 每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁(读锁、写锁、行锁等),确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据...

AggressionStorm的博客 26万+

Dynamics 365 F&O 开发入门(一)-- 从零开始建表

从零开始一步一步教你在Dynamics 365 F&O中创建一个表

qq_48843110的博客 942

03-Django REST framwork 板块(03-认证、权限、节流)

文章目录1. 认证2. 权限3. 访问频率限制 1. 认证 2. 权限 3. 访问频率限制 拿IP来记录,对于没登录的匿名用户,我们能拿到的也只有IP,要是换IP,这个控制不了(只在Django内部实现的功能内) ...

AggressionStorm的博客 21万+

杰理接入第三方升级协议OTA教程

本教程介绍了使用dual_bank_updata_api.h接口接入第三方协议进行固件升级的方法。主要内容包括:INI配置要求(需启用双备份并强制4K对齐)、7个核心API接口功能说明及参数详解(初始化、空间检查、数据写入、校验等)、标准升级流程步骤(初始化→检查→写入→校验→引导→清理)。特别强调了4K对齐配置的重要性以避免数据丢失,并提供了被动升级流程图。该方案支持用户自定义协议接入,需严格按照流程调用接口完成升级。

qq_42014563的博客 1429

Allegro技巧----相同模块复用实现快速布局

使用Allegro软件进行PCB Layout设计时,当电路图中有很多路相同的模块,使用模块复用的的操作方法,可以显著提高工作效率,同时也可以使PCB布局在整体上显得美观。 如图,有8个相同的ADC采样电路模块,它们在原理图中的电路也是一样的,对于这多个相同的电路模块,如果一个个元器件布局很明显做了很多重复机械的劳动,效率低下;但是强大的Allegro软件早就考虑到了这点,只需要在PCB中做好其中的一个,则其余相同的模块通过复用的方式,可以快速完成,方便省事还美观。 具体步骤: 1.首先完成一个模块的PC

sinat_15677011的博客 5655

Django中models字段含义、用法

Model 文章目录Model一、model基本结构1.字段名称、含义2.参数含义3.元信息Meta(干预数据库建表名等操作)4.扩展二、连表结构 *****1.字段以及参数三、表的操作(正向查询按字段,反向查询按表名)1.基本操作(增、删、改、查)2.表操作进阶(牛逼的 双下划线 __ )3.其他4.联表操作(利用 双下划线 __ )1. ==一对一操作==2.==一对多==3.==多对多...

AggressionStorm的博客 20万+

YOLOv9改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计

实时检测器架构的轻量级设计GsConv。

Limiiiing的博客 1364

a3.sqlalchemy-scoped_session

scoped_session防止内存泄漏,保护性session的创建。 SQLAlchemy 的 scoped_session 是啥玩意 通常我们用 SQLAlchemy 写数据的时候要创建 Session 对象来维护数据库会话,用完了再关掉。但是听说还有个叫scoped_session的玩意,这是做啥用的? 这东西其实与 web 应用有一些关系。我们在使用 Django 的 ORM 的时候怎...

AggressionStorm的博客 20万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

a1.sqlalchemy-研究

文章目录Sqlalchemy And Flask-Sqlalchemy使用sqlalchemy时,先搞明白:sqlalchemy使用事务操作(数据库会话也成为事务)`db.session.flush`详解sqlalchemy注意点1. `filter_by(name='haha').count()`的坑2.`pagination_obj.items和pagination_obj.total`的弊端...

AggressionStorm的博客 20万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

a2.sqlalchemy-操作

文章目录一、sqlalchemy中的==查询==分析1、基本查询filter和filter_by的区别:如何查看sqlalchemey的sql语句表中单个字段查询first()==one()==get 根据主键查询limit 限制查询结果offset() 限制前面n个,显示后面n+1个,向后便宜Ngeslice() 切片,也可以直接使用[1,9]order_by() 元素排序 顺序desc() 逆...

AggressionStorm的博客 20万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

logging日志模块

文章目录一、logging模块logging模块的四大组件Loggers(日志记录器)Handlers(日志处理器)Filters(日志过滤器)Formatters(日志记录格式化)二、[django官方中文文档](https://docs.djangoproject.com/zh-hans/2.2/topics/logging/)三、django日志配置,简单例子分析 一、logging模块 ...

AggressionStorm的博客 20万+

uWSGI、WSGI分析

文章目录WSGI协议WSGI协议的实现django WSGI applicationdjango WSGI Serverdjango simple_serveruWSGI简介高性能分析 WSGI协议 首先弄清下面几个概念: **WSGI:**全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web se...

AggressionStorm的博客 20万+

02-Django REST framwork 板块(02-CBV、FBV详解)

文章目录一、CBV / FBV处理请求的实现方式二、CBV详解1.原理:2.流程3.CBV对csrf的实现三、注意点1. CSRF基于Django的中间件的实现2. CSRF两种配置方式 一、CBV / FBV处理请求的实现方式 1.一个是基于类写的,一个是基于函数写的,本质上区别不大。 2.推荐CBV方式来写,因为里边直接对请求方式进行了判断 # 基于FBV (function base v...

AggressionStorm的博客 20万+

06-Django REST framwork 板块(07-分页、08-视图、路由、09-渲染)

7. 分页 a. 分页,看第n页,每页显示n条数据;(基于PageNumberPagination,最常用) b. 分页,在某个位置,向后查看n条数据;(基于LimitOffsetPagination) c. 加密分页,上一页和下一页(基于CursorPagination,对页码链接进行加密,避免恶意操作)。 8. 视图 a. 过去(Django的CBV模式) b. 现在 (rest ...

AggressionStorm的博客 20万+

01-Django REST framwork 板块( 01-REST规范)

文章目录一、Django CBV / FBV处理请求的实现方式二、RESTFUL API 设计三、知识点1. 10个restfull规范,分析记忆2. 常见重点分析a. 用过rest framework,那么写视图的时候,都继承过哪些类?b. 用过比较接近原生的类,还可以继承原生的其他子类c. 哪里用过面向对象的封装?d. 哪里用过面向对象的继承?e. 多态、鸭子类型? 一、Django CBV ...

AggressionStorm的博客 20万+

04-Django REST framwork 板块(04-版本、05-解析器)

Django REST framework 板块 Django REST framework 板块 4. 版本 a. URL中通过GET传参() b. 在URL中传参(推荐使用) 总结使用 5. 解析器 总结使用 4. 版本 共三个值需要设置(见源码): 1.self.version_param 传输版本的键(’version’还是’V’等) 2.self....

AggressionStorm的博客 19万+

Django DRF 内置 user group permission实现RBAC

用户(User)→ 角色(Group)→ 权限(Permission)→ API 接口(DRF)

kobe_okok的博客 253

基于深度学习的交通场景多目标检测与交通流量分析——YOLO26m训练、ONNX部署与Django流量大屏实现

本文介绍一套基于深度学习的交通场景多目标检测与交通流量分析系统。模型侧使用6633张交通画面、79628个标注实例训练YOLO26m主模型,并以YOLO11m、YOLOv8m做同条件对比,评估采用逐类AP应对类别不平衡;应用侧基于Django与Vue2实现登录、图片识别、历史记录与流量大屏四个模块,识别优先走ONNX推理并支持模型切换,检测结果按类别聚合,直观呈现道路车流构成。

WEIXIN_JSJBSZDS的博客 272

第3章 第1节:Mapping 映射详解

ip:存 IPv4/IPv6 地址,支持 CIDR 网段查询(10.0.0.0/8)、范围查询、排序聚合。geo_point:存经纬度,支持(附近 N 公里)、(矩形范围)、按距离排序,适合"附近的门店"类需求,入门了解即可。预期返回。

啊渊的专栏 112

Django + DRF 工业后端实战|从项目结构到批量删除接口踩坑

本文分享了使用Django+DRF开发工业后台系统的实战经验,涵盖项目结构设计、时间格式化、ModelViewSet快速构建CRUD接口、自定义批量删除接口(含关键坑点)、以及模块化开发优势。重点解析了@action中detail=False的正确用法,强调参数传递与路由匹配逻辑,提醒注意级联删除风险。文章适合初学DRF的开发者,强调解耦设计与生态成熟度,助力高效构建多协议、高并发的工业后端系统。

kana_yonk的博客 197
上一篇: 04-Django REST framwork 板块(04-版本、05-解析器)
下一篇: 06-Django REST framwork 板块(07-分页、08-视图、路由、09-渲染)
AggressionStorm
博客等级 码龄9年 6粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值