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源码分析的更多相关文章

  1. ASP.NET Core 源码阅读笔记(2) ---Microsoft.Extensions.DependencyInjection生命周期管理

    在上一篇文章中我们主要分析了ASP.NET Core默认依赖注入容器的存储和解析,这一篇文章主要补充一下上一篇文章忽略的一些细节:有关服务回收的问题,即服务的生命周期问题.有关源码可以去GitHub上 ...

  2. VueJs 源码分析 ---(二)实力化生命周期,以及解析模版和监听数据变化

    Vue 源码第二步 当前 Vue 的版本 V2.2.2 生命周期 相关介绍 我们可以从 setp1 中 去看到那张 vue 的生命周期图中看到,vue 的生命周期钩子. 具体的钩子时干什么的? 以及在 ...

  3. 前端笔记之Vue(三)生命周期&CSS预处理&全局组件&自定义指令

    一.Vue的生命周期 生命周期就是指一个对象的生老病死的过程. 用Vue框架,熟悉它的生命周期可以让开发更好的进行. 所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对属性和 ...

  4. DRF之Jwt 实现自定义和DRF小组件及django-filter插件的使用

    一.DRF之Jwt 实现自定义 二.DRF(过滤,排序,分页)组件 三.Django-filter插件的使用和自定义 """ 1.drf-jwt手动签发与校验 :只是做t ...

  5. asp.net core 自定义认证方式--请求头认证

    asp.net core 自定义认证方式--请求头认证 Intro 最近开始真正的实践了一些网关的东西,最近写几篇文章分享一下我的实践以及遇到的问题. 本文主要介绍网关后面的服务如何进行认证. 解决思 ...

  6. SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析

    SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析 一:问题demo展示 ...

  7. flask 源码专题(二):请求上下文与全文上下文

    源码解析 0. 请求入口 if __name__ == '__main__': app.run() def run(self, host=None, port=None, debug=None, lo ...

  8. 02 drf源码剖析之快速了解drf

    02 drf源码剖析之快速了解drf 目录 02 drf源码剖析之快速了解drf 1. 什么是drf 2. 安装 3. 使用 3. DRF的应用场景 1. 什么是drf drf是一个基于django开 ...

  9. tomcat源码分析(三)一次http请求的旅行-从Socket说起

    p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具. ...

随机推荐

  1. Lightning Web Components 开发指南(二)

    Lightning Web Components 是自定义元素使用html 以及现代javascript进行构建. Lightning Web Components UI 框架使用web compon ...

  2. JavaScript高级程序编程(三)

    2017-06-24 更新 北京连续三天下雨啦 乘性操作符   1.ECMA中定义了三种操作符,乘法 除法 和求模 并与其他语言相应操作符相同,再计算之前如果不是数值,会先去调用number()方法转 ...

  3. Error:gradle-resources-test:thymeleaf-in-action.main: java.lang.NoClassDefFoundError: org/apache/tools/ant/util/ReaderInputStream

    目录 Error:gradle-resources-test:thymeleaf-in-action.main: java.lang.NoClassDefFoundError: org/apache/ ...

  4. Linux查看当前操作系统版本信息

    .Linux查看当前操作系统版本信息 cat /proc/version Linux version -.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gc ...

  5. mysql substring()函数,字符串分割

    mysql> select * from test; +----+------------+-------+-----------+ | id | name | score | subject ...

  6. 【BIRT】修改主题背景颜色

    下图是BIRT默认的颜色配置,为了跟系统颜色格局相一致,此处需要对颜色进行修改; 下面简单介绍了如何修改不同位置的背景颜色 对应文件地址均在目录:../webcontent/birt/styles下 ...

  7. fluent运行过程中转换边界

    我们以一个简单的VOF算例来说明,算例模型如下: 算例中空气为主相,水为次相.开始时刻,inlet_one设置为速度入口边界,速度为1m/s,且水的体积分数为100%,inlet_two设置为速度入口 ...

  8. 把pdf的内容转化为txt文件

    import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.util.PDFTextStripper; import j ...

  9. 菜鸟学IT之分布式文件系统

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3310 1.目录操作 在HDFS中为hadoop用户创建一个用户目录(had ...

  10. NFV实验平台

    NFV架构如下图所示. NFVI对应于数据平面,数据平面转发数据并提供用于运行网络服务的资源. MANO对应于控制平面,该控制平面负责构建各种VNF之间的连接以及编排NFVI中的资源. VNF层对应于 ...