drf复习(一)--原生djangoCBV请求生命周期源码分析、drf自定义配置文件、drf请求生命周期dispatch源码分析
admin后台注册model
一、原生djangoCBV请求生命周期源码分析
原生view的源码路径(django/views/generic/base.py)
1.从urls.py中as_view()入手,进入as_view()的源码,前台传递的数据都进入as_view()函数
2.进入as_view()中view()函数接收前台传递过来的参数处理,dispath()把返回值分发下去,进入dispatch源码
3.dispatch源码分析,最后的返回值handler是对象.请求方式
dispatch本质:是返回值handler的结果,handler结果是views视图中功能函数(get,post此类请求)的结果,views功能函数的结果就是返回页面的结果(render,HttpResponse,redict等响应)
整个流程总结:
从url的as_view()进入,as_view()函数中的view()函数返回值dispatch。进入dispatch(),dispatch的返回值handler是对象.请求方式的返回值,对象.请求方式的值就是views视图中各个请求方式的返回值,这样就串起来了。
二.drf自定义配置文件
1.首先是一些配置文件(原生settings配置文件在rest_framework/settings/APISettings路径下)
如果你想自定义配置,可以在项目的settings.py文件中这样写(下面是用两个模块举例)
三、drf请求生命周期
APIView源码路径(rest_framework/views.py)(******)
1.也是从as_view()进入,因为Test没有as_view这个方法,所以只能走父类APIView的as_view
2.请求走的是APIView的as_view函数
3.APIView的as_view调用父类的(django原生)的as_view方法,同时还禁用了csrf认证
4.重写了父类的dispatch方法,完成任务方法交给视图类请求函数处理,得到请求的响应结果response,返回给前台。
总结:大致流程和原生django的生命周期类似,但是dispatch中有一些其他用法,以后APIView源码分析可以直接从dispatch中入手
APIView中dispatch源码
dispatch中包括(请求模块request,三大认证,异常模块,渲染模块render)
def dispatch(self, request, *args, **kwargs): self.args = args
self.kwargs = kwargs
#二次封装request
#请求模块
request = self.initialize_request(request, *args, **kwargs)
self.request = request
self.headers = self.default_response_headers # deprecate? try:
#做三大认证(在请求对象request和请求执行之间)
self.initial(request, *args, **kwargs)
#原生django也是这样写
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(),
self.http_method_not_allowed)
else:
#原生django提供的异常
handler = self.http_method_not_allowed
response = handler(request, *args, **kwargs) except Exception as exc:
#处理认证失败,drf提供的异常
#异常模块
response = self.handle_exception(exc)
#渲染模块
#返回值给前台
self.response = self.finalize_response(request, response, *args, **kwargs)
return self.response
具体的模块分析请到之前的drf笔记中
https://www.cnblogs.com/wangcuican/p/11674996.html
drf复习(一)--原生djangoCBV请求生命周期源码分析、drf自定义配置文件、drf请求生命周期dispatch源码分析的更多相关文章
- ASP.NET Core 源码阅读笔记(2) ---Microsoft.Extensions.DependencyInjection生命周期管理
在上一篇文章中我们主要分析了ASP.NET Core默认依赖注入容器的存储和解析,这一篇文章主要补充一下上一篇文章忽略的一些细节:有关服务回收的问题,即服务的生命周期问题.有关源码可以去GitHub上 ...
- VueJs 源码分析 ---(二)实力化生命周期,以及解析模版和监听数据变化
Vue 源码第二步 当前 Vue 的版本 V2.2.2 生命周期 相关介绍 我们可以从 setp1 中 去看到那张 vue 的生命周期图中看到,vue 的生命周期钩子. 具体的钩子时干什么的? 以及在 ...
- 前端笔记之Vue(三)生命周期&CSS预处理&全局组件&自定义指令
一.Vue的生命周期 生命周期就是指一个对象的生老病死的过程. 用Vue框架,熟悉它的生命周期可以让开发更好的进行. 所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对属性和 ...
- DRF之Jwt 实现自定义和DRF小组件及django-filter插件的使用
一.DRF之Jwt 实现自定义 二.DRF(过滤,排序,分页)组件 三.Django-filter插件的使用和自定义 """ 1.drf-jwt手动签发与校验 :只是做t ...
- asp.net core 自定义认证方式--请求头认证
asp.net core 自定义认证方式--请求头认证 Intro 最近开始真正的实践了一些网关的东西,最近写几篇文章分享一下我的实践以及遇到的问题. 本文主要介绍网关后面的服务如何进行认证. 解决思 ...
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析 一:问题demo展示 ...
- flask 源码专题(二):请求上下文与全文上下文
源码解析 0. 请求入口 if __name__ == '__main__': app.run() def run(self, host=None, port=None, debug=None, lo ...
- 02 drf源码剖析之快速了解drf
02 drf源码剖析之快速了解drf 目录 02 drf源码剖析之快速了解drf 1. 什么是drf 2. 安装 3. 使用 3. DRF的应用场景 1. 什么是drf drf是一个基于django开 ...
- tomcat源码分析(三)一次http请求的旅行-从Socket说起
p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具. ...
随机推荐
- pgloader 学习(三)快速使用
pgloader 支持多种数据源数据的加载,以下列出简单的操作命令,后边会有详细的使用说明 csv 格式内容加载 预备说明 需要先在pg 数据库创建表 create table districts_l ...
- hasura graphql-engine 最近版本的一些更新
好久没有在关注hasura graphql-engine 了,从最新的release 信息可以看到graphql-engine 已经beta 阶段了,而且目前是v1.0.0-beta.2 估计离生产可 ...
- MQTT 遗嘱使用
大部分人应该有这个需求: 我想让我的APP或者上位机或者网页一登录的时候获取设备的状态 在线还是离线 设备端只需要这样设置 注意:MQTT本身有遗嘱设置 所以大家可以设置遗嘱 ,注意哈,发布的主题 ...
- [RN] React Native 使用 react-navigation 报错 "Unable to resolve module `react-native-gesture-handler`
在React Native 使用 react-navigation 过程中,报错 "Unable to resolve module `react-native-gesture-handle ...
- 【luoguP2997】[USACO10NOV]旗帜Banner
题目链接 长和宽的gcd(x,y)=1,就没有中间结点,一种线段有两种方向,暴力统计一下就好了 注意x=0或y=0时的线段只有一种方向 #include<iostream> #includ ...
- 可持久化01trie树——模板
给你一个数,在一段区间内找到另一个数,使得他们的异或最大: trie树上存储每个数的二进制位,查询时贪心查询能让当前高位取得1的位置: 实际上是一个求前缀和的思想.每个数都开一个trie树浪费空间,当 ...
- leetcode题目讲解(Python):字符串转整数 (atoi)
分析这道题,输入数据有如下几种情况: 第一类:输入字符串无法转换为整数 这一类包含以下几种情况: 输入字符串为空 开头字符为数字.符号(+,-).空格以外的字符 有多个加减符号的字符串 符号没有紧跟数 ...
- SpringBoot聚合项目打包
1.打包遇到的问题: 子模块打包时,每次打包出来的jar都只有3k左右,没办法运行,目测应该是依赖的jar没有打包进来! 2.解决办法: 2.1.主项目的pom.xml里面不需要打包配置 2.2.在需 ...
- Git基本介绍(三大分区及核心内部构造)
1. Git三大工作区(工作区.暂存区和版本库) 工作区(WORKING DIRECTORY): 直接编辑文件的地方,肉眼可见直接操作: 暂存区(STAGIN AREA):数据(快照)暂时存放的地方: ...
- 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践
一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...