django及DRF流程源码分析

Django执行流程:

1.nginx作为接入层,通过反向代理,监听80端口获取请求连接
2.将请求交给wsgi server
3.wsgi server调用django的wsgi.py 处理请求
4.WSGIHandler的__call__函数就是整个逻辑处理流程
5.WSGIHandler __init__中的加载中间件,对request对象做处理
6.urlpatterns匹配对应视图view处理逻辑
7.中间件处理response
8.返回response

DRF执行流程:

rest-framwork在urlpatterns指定的逻辑层上,增加了对应处理流程(比如请求方法判定,权限鉴定)

1.到url,执行views.TestView.as_view()函数
2.as_view方法是被定义在rest_framework/views.py里面的一个静态方法,所以可以通过类名直接调用
3.父类的as_view方法是定义在django/views/generic/base.py里面的View类中的方法。在这个方法中最终会执行cls.dispatch,在第一步中我们知道cls是<class ‘app01.views.TestView’>
4.dispatch是定义在TestView继承的父类APIView(rest_framework/views.py)里面的方法。在这个方法里面,首先通过 request = self.initialize_request(request, *args, **kwargs)这条语句重新封装了request对象
5.initialize_request是APIView类里面的一个方法,重新封装了request对象,增加了一些属性信息
return Request(
request,
parsers=self.get_parsers(),
authenticators=self.get_authenticators(),
negotiator=self.get_content_negotiator(),
parser_context=parser_context
)
1.认证信息:主要通过APIView类中的get_authenticators(rest_framework/views.py)方法获取,这个方法会返回一个所有认证对象的列表[auth() for auth in self.Authentication_classes]
在全局定义的authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES
2.在rest_framework/authentication.py中定义了几种认证类型

class BaseAuthentication(object) 基本认证类class BasicAuthentication(BaseAuthentication) 基础认证类class SessionAuthentication(BaseAuthentication) 会话认证类class TokenAuthentication(BaseAuthentication) 令牌认证类class RemoteAuthentication(BaseAuthentication) 远程用户认证类一般情况我们需要自定义认证类,也可以使用django-oauth-toolkit组件进行认证。

6.dispatch中的initialize_request方法执行完成之后,还有执行一个重要方法是self.initial(request,
*args, **kwargs),这个方法也是APIView类里的。在这个方法里面初始化被重新封装的request对象。实现以下功能
1.版本处理(version, scheme = self.determine_version(request, *args, **kwargs) request.version, request.versioning_scheme = version, scheme)

2.用户认证(self.perform_authentication(request))3.权限(self.check_permissions(request)4.访问频率限制 (self.check_throttles(request))认证:
1.执行APIView里面的perform_authentication方法,该方法返回request.user,则会调用<rest_framework.request.Request object at 0x10e80deb8>里面的user方法。在user方法里面最终调用了Request类里面的_authenticate方法
2.执行rest_framework.request.Request类中的_authenticate方法,这个方法会遍历认证类(遍历认证对象列表,并执行里面的authenticate方法,获取认证信息,并根据认证结果给self.user, self.auth赋值。由于user,和auth都有property属性,
所以给赋值的时候先在先执行setter方法

7.dispatch中的initial方法执行完之后,会继续判断request.method并执行method相应的method.

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

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

相关文章

【ARM AMBA AXI 入门 16 - AXI 写响应通道 BVALID | BREADY | BRESP 详细介绍】

请阅读【ARM AMBA AXI 总线 文章专栏导读】 文章目录 AXI 写响应通道BVALIDBREADYBRESP举例BRESP[2:0] 编码AXI 写响应通道 在 ARM AMBA AXI 协议中,写响应通道包括以下三个信号,用来完成写事务的确认和状态传递: BVALID 这是一个从设备(Slave)发出的信号,表明与当前…

生态系统NPP及碳源、碳汇模拟实践技术应用

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。碳中和可以从碳排放&#xff08;碳源&#xff09;和碳固定&#xff08;碳汇&#xff09;这两个侧面来理解。陆地生态系统在全球碳循环过程中有着重要作…

【HarmonyOS】低代码平台组件拖拽使用技巧之常用基础组件(上)

【关键字】 HarmonyOS、低代码平台、组件拖拽、常用基础组件、基础容器 1、写在前面 之前是花了一些时间介绍了在低代码平台中滚动容器、网格布局、页签容器、列表这几种容器的拖拽技巧及使用方法&#xff0c;今天我会继续来介绍咱们在应用开发中可能会经常用到的一些基础容器…

Flutter dio Http请求之Cookie管理

在应用开发过程中&#xff0c;我们进行Http通讯时会使用Cookie进行验证&#xff0c;今天我们就着重讲解Flutter 网络请求插件dio的cookie使用。 首先&#xff0c;我们要进行插件引用 # HTTP 请求 dio: ^5.1.1 cookie_jar: ^4.0.8 dio_cookie_manager: ^3.0.0# 获取沙盒路径 p…

CSS 属性计算过程

CSS 属性计算过程 首先&#xff0c;不知道你有没有考虑过这样的一个问题&#xff0c;假设在 HTML 中有这么一段代码&#xff1a; <body><h1>这是一个h1标题</h1> </body>上面的代码也非常简单&#xff0c;就是在 body 中有一个 h1 标题而已&#xff…

CSDN每日一练 |『多边形的面积』『硬币的面值』『开学趣闻之美食诱惑』2023-11-21

CSDN每日一练 |『多边形的面积』『硬币的面值』『开学趣闻之美食诱惑』2023-11-21 一、题目名称:多边形的面积二、题目名称:硬币的面值三、题目名称:开学趣闻之美食诱惑一、题目名称:多边形的面积 时间限制:1000ms内存限制:256M 题目描述: 给出一个简单多边形(没有缺口)…

Docker快速安装Mariadb11.1

MariaDB数据库管理系统是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可 MariaDB的目的是完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;使之能轻松成为MySQL的代替品。在存储引擎方面&#xff0c;使用XtraDB来代替MySQL的InnoDB。 Mari…

AIX 系统基线安全加固操作

目录 账号管理 ELK-AIX-01-01-01 口令 ELK-AIX-01-02-01 授权 ELK-AIX-01-03-01 通信协议 IP协议安全 ELK-AIX-03-01-01 ELK-AIX-03-02-01 路由协议安全 补丁管理 ELK-AIX-04-01-01 服务进程和启动 ELK-AIX-05-01-01 设备其他安全要求 登陆超时策略 ELK-AIX-06-01-01 …

Clickhouse初认识

技术主题-clickhouse 一什么是clickHouse 1&#xff09;本质上就是一款数据库管理系统&#xff0c;能提供海量数据的存储和检索 2&#xff09;基于列存储&#xff0c;数据是按照列进行存储的&#xff08;数据格式一样&#xff0c;方便进行压缩&#xff09; 3&#xff09;具备…

基于Cortex®-M4F的TM4C123GH6NMRT7R 32位MCU,LM74900QRGERQ1、LM74930QRGERQ1汽车类理想二极管

一、TM4C123GH6NMRT7R IC MCU 32BIT 256KB FLASH 157BGA Tiva™C系列微控制器为设计人员提供了基于ARMCortex™-M的高性能架构&#xff0c;该架构具有广泛的集成功能以及强大的软件和开发工具生态系统。以性能和灵活性为目标&#xff0c;Tiva™C系列架构提供了一个具有FPU的80…

JS中Cookie的基本使用

JavaScript 创建Cookie&#xff1a; JavaScript 读取 Cookie &#xff1a; JavaScript 修改 Cookie&#xff1a; JavaScript 删除 Cookie &#xff1a; JavaScript Cookie&#xff08;JavaScript 的 Cookie&#xff09;是一种在Web浏览器中存储和检索用户信息的机制。它允许…

人性化的微距LED显示屏备受欢迎

近年来&#xff0c;微距LED显示屏市场需求不断攀升&#xff0c;尤其是LED显示屏厂商不断推陈出新的COB和Mini LED封装技术&#xff0c;价格逐渐趋于亲民。随着智慧城市的崛起&#xff0c;微距LED显示屏成为市场上备受瞩目的热门产品。伴随LED显示屏厂商不断升级产品&#xff0c…

单片机和FreeRTOS上跑机器人ROS的应用

机器人的应用越来越广泛了&#xff0c;大家熟知的稚晖君直接创业搞机器人&#xff0c;可想而至&#xff0c;接下来的十年&#xff0c;机器人绝对是热门的行业。 目前市面上很多机器人都是基于一套叫做ROS的系统开发的&#xff0c;今天就给大家分享一个跑在MCU上&#xff0c;基…

抖店与维格表的对接只需轻松几步

通过数环通&#xff0c;您可以使用不到几分钟的时间即可实现抖店与维格表的对接与集成&#xff0c;从而高效实现工作流程自动化&#xff0c;降本增效&#xff01; 1.产品介绍 维格表是一种数据协作工具&#xff0c;具有多维度表格、实时在线编辑、数据可视化等特点。它可以帮助…

基于Python+OpenCV+Tensorflow图像迁移的艺术图片生成系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统![请添加图片描述](https://img-blog.csdnimg.cn/dbda87069fc14c24b71c1eb4224dff05.png)四. 总结 一项目简介 基于PythonOpenCVTensorfl…

Apache ECharts简介

二十九、Apache ECharts 29.1 介绍 Apache ECharts 是一款基于 JavaScript 的数据可视化图表库&#xff0c;提供直观、生动、可交互、可个性化定制的数据可视化图表。 官网地址&#xff1a;https://echarts.apache.org/zh/index.html 常见效果展示&#xff1a; 1). 柱形图 …

TensorFlow实战教程(三十五)-VS Code配置Python编程和Keras环境及手写数字识别(基础篇)

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章利用Keras构建无监督学习Autoencoder模型并实现聚类分析。这篇文章将介绍基础知识,因为很多读者咨询我如何用VS Code配置Keras深度学习环境,并对比常用的深度学习框架,最后普及手写数字识…

NodeMCU ESP8266构建Web Server网页端控制设备

NodeMCU ESP8266构建Web Server网页端控制设备 前言 NodeMCU ESP8266 内部集成了TCP/IP协议栈&#xff0c;可以快速构建网络功能&#xff0c;搭建联网应用的硬件平台&#xff1b; ESP8266可以作为WiFi接入点&#xff08;Station&#xff09;&#xff0c;这样可以方便连接互联…

时间管理的高效提升措施

时间管理的高效提升措施&#xff1a; 制定计划&#xff1a;每天早上花几分钟规划当天的工作和任务&#xff0c;列出要完成的任务清单&#xff0c;并按照优先级排序。这有助于更好地掌握时间&#xff0c;避免被琐碎的事情所困扰&#xff0c;并保证时间的有效利用。 设定目标&a…

网站SSL证书过期了

当网站的SSL证书到期时&#xff0c;这可能会对网站的安全性和可信度产生负面影响。SSL证书是保证网站安全连接的重要组成部分&#xff0c;它通过加密传输数据&#xff0c;确保用户与网站之间的信息传输安全可靠。然而&#xff0c;一旦SSL证书过期&#xff0c;可能会引发一系列问…