一、django请求的生命周期

  1、django请求生命周期如图所示

    

   2、django本身没有socket,客户端请求先到达wsgi然后再提交给django,而wsgi的本质就是个socket程序

    注释 wsji协议是通过调用wsgiref或uwsgi模块来实现socket的

二、FBV和CBV

  1、FBV

    function base view, 一个URL路径对应一个视图函数

  2、CBV

    class base view,    一个URL路径对应一个视图下的类

  3、FBV设置方法

    略

  4、CBV设置方法

    1、设置URL格式

      

      注释:对应的类名后必须添加.as_view(),标准格式记住就可以了。

    2、在view中设置class类

      

      注释:设置类时必须先导入一个View模块,然后继承该模块。在该类中先执行父类View中的dispatch方法,然后通过反射判断如果以get请求发送数据自动执行get下的方法,如果以post请求发送数据自动执行post下的方法。

     3、在父类View中的dispatch方法

      

      注释:由于父类中的displaced方法使用了lower()吧字符串转小写的方法所有类下的函数名都是小写。getattr()反射原理意思就是说get请求对应class下的get函数,然后handler()就是执行类下该函数然后返回结果。

     4、自己手动编写一个dispatch方法

      

      注释:由于手动编写直接返回一个"ok"所有不再执行下面的get和post方法

    5、CBV利用dispatch处理数据顺序实现用户登陆验证(相当于添加了个装饰器)

      

      注释:cbv中先执行dispatch再执行get和post最后再执行dispatch然后吧结果发送出去,所有可以在执行get或post之前做一层用户验证是否登陆

         # request.GET      获取GET请求体中的信息
                                # request.POST    获取POST请求体中的信息    请求方式是由客户端的请求头中的:content-type决定的
                                # request.body  获取body的信息,GET或POST中的信息是由body中的原始信息转换来的

    6、通过类继承的方法实现5中的需求

      

    7、通过类多继承的方式来实现5中需求

      

      注释:类继承的执行顺序:从左到右

   8、通过装饰器方式来实现5中需求

    装饰器方式1:在每个类下的函数前添加装饰器

      

    装饰器方式2:直接在dispatch函数上添加装饰器

      

    装饰器方式3:直接在类中添加装饰器,用来修饰某个特定的函数

      

      总结:全局设置或者局部设置都要三思而后行

    在服务器端通过装饰器取消csrf_token验证(先导入from django.views.decorators.csrf import csrf_exempt,csrf_protect)

    1.csrf_exempt取消post方式提交的csrf_token验证

        

        注释:只要把该装饰器设置在类下的dispatch函数上才会生效,必须的没理由

    2.csrf_protect取消get方式提交的csrf_token验证

      如上图,略

   9、客户端请求方式( restful规范就是潜规则的意思)

       1、get请求方式:一般是获取数据的时候使用

       2、post请求方式:一般是提交数据的时候使用

       3、put请求方式:一般是全局更新数据的时候使用

       4、patch请求方式:一般是局部更新数据的时候使用

     5、delete请求方式:一般是删除数据的时候使用

     注释:form表单提交数据只支持get和post方式

        ajax提交数据支持get, post, put, patch, delete, head, options, trace等方式

三、django中间件

  1、如图所示:

    

    注释:django中间键其实就是由类组成,每一个类就是一个中间键。而每一个类里面都可以有五个方法。

  2、方法1(process_request方法) 和方法2(process_response方法):

     

     注释:图一方法直接导入模块然后在模块中创建类进行引用,但是适用于旧版本的Django,新版本的Django建议使用图二方法,直接把        MiddlewareMixin模板中的MiddlewareMixin类方法复制过来就可以了。

    1、process_request    可以有返回值也可以没有返回值

      当有返回值时也就是说有return值时执行的流程,如图所示:

      

      注释:绿色部分为正常流程,而红色部分为当process_request有return返回值的时候就会不走下面的步骤了直接走对应的process_response步骤即直接执行当前中间件和上方中间件的process_response。

    

      利用该知识点设置用户cookie授权验证,如果未授权则url自动跳转至登录页面,但是必须注意的时现在的中间键必须添加在csrf_taken之后否则没有经过csrf就会被拦截返回,一直陷入死循环并且必须设置登录页面的路径可以正常通过。

    2、process_response  必须要有返回值也就是说必须要有return值,否则报错,原理如图所示:

      

      注释:process_reques1 》》process_request2》》process_request3。。。。 view tem 》》。。。》》process_response3》》process_response2》》process_response1。由此可得出在视图函数中返回的response数据可用和用户接受到的response数据不一致那是因为response数据传输到中间键时可能会被修改。比如响应头信息就是在中间键的时候添加上去的。

  3、方法3(process_view方法):

    1、process_view   在成功路由匹配后而在执行view视图函数之前执行的代码,该函数可以有返回值也可没有返回值。

      

    2、执行流程1(没返回值时的执行流程)

      

      注释:先执行process_request然后再执行process_view然后再执行view tem最后执行process_response3

    3、执行流程2(有返回值时的执行流程)

      

  4、方法4(process_exception):

     1、process_exception 该函数是在程序代码出现内部错误返回错误信息时才会执行的函数,该函数必须要有返回值否则无意义,默认是不会被执行的

      

    2、执行流程

      

      注释:先执行process_request然后再执行process_view然后再执行view tem然后再执行process_exception最后执行process_response3

  5、方法5(process_template_response())

    1、process_template_response(self,request,response)     该函数默认不会被执行但是如果返回的结果中有render方法就会被执行且必须有return返回值。

      

  6、Django内部中间键

    

    注释:该中间键的作用就是检测用户传输数据是否有csrf_token键值对,如果有则通过否则403错误

       可以到CsrfViewMiddleware模块中查看中间键的使用方法

      @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。

      @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

      

django内容总结的更多相关文章

  1. Python脚本调用Django内容

    一.添加系统的环境变量 1.需要引用os模块中environ关键字,其中'mybbs.settings'表示是django项目下的setings文件 eg: import os os.environ[ ...

  2. 回顾django内容

    回顾: 1 HTTP协议:(重点) -请求 -请求首行 -GET /index HTTP/1.1 -请求头部(在django框架中,可以从META中取出来) -key:value------>\ ...

  3. Django 内容回顾

    模板 变量 {{ }} 标签 {% %} if elif else for empty forloop() with...as csrf_token 过滤器 default length add da ...

  4. Django - 内容总结(1)

    内容整理: 1.创建django工程名称 django-admin startproject 工程名 2.创建app cd 工程名 python manage.py startapp cmdb 3.静 ...

  5. django内容回顾:

    Django 下载安装 命令行 pip install django==1.11.26 -i 源 pycharm 创建项目 命令行 django-admin startproject 项目名 pych ...

  6. Django1.8教程——从零开始搭建一个完整django博客(一)

    第一个Django项目将是一个完整的博客网站.它和我们博客园使用的博客别无二致,一样有分类.标签.归档.查询等功能.如果你对Django感兴趣的话,这是一个绝好的机会.该教程将和你一起,从零开始,搭建 ...

  7. 《Django By Example》第六章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:无他,祝大家年会都中奖!) 第六章 ...

  8. Django(一) 安装使用基础

    大纲 安装Django 1.创建Django工程 2.创建Django app 3.写一个简单的登录注册相应页面 4.获取用户请求信息并处理 5.前后端交互 6.Django 请求 生命周期  跳转到 ...

  9. 9.25中间件和Django的学过的知识总结

    2018-9-25 12:10:54 参考连接:http://www.cnblogs.com/liwenzhou/p/8761803.html 浏览器访问Django的过程 面试时容易问到   Dja ...

随机推荐

  1. html-解决乱码问题

    1.创建HTML时,需将文件编码设置为UTF-8: 2.需要在<head>元素下,借用<meta>元素设置内容的编码: 1)文件的编码:在webstorm中设置文件编码的问题: ...

  2. codeforces #364b Cells Not Under Attack

    比赛的时候 long long sum=n*n,计算不出1e10长度到数,没有搞掉. 哎,以后要注意这个地方.这个题其实不难: 统计能被攻击到的个数,然后用总的个数减掉就可以了.注意有些地方重复计算, ...

  3. 树莓派、 Arduino 、传统单片机开发板该如何选择?

    几十年前的电子爱好者,最喜欢的就是电烙铁.面包板和收音机:十几年前,出现了单片机,于是玩具就成了电烙铁.面包板和单片机:到了2015年,贴片技术的不断普及,让面包板不再那么有用武之地,经济的发展也让现 ...

  4. IOS MagicRecord 详解 (转载)

    2014-10-22 14:37 6137人阅读 评论(6) 收藏 举报 IOSMagicRecordCoreData 目录(?)[+] 刚开始接触IOS不久,尝试着翻译一些博客,积累技术,与大家共享 ...

  5. python 开发技巧(4)-- 用PyCharm实用技巧(我自己常用的)

    pycharm快捷键 1.快速导入类 Ctrl + Alt + Space 2.追踪类和方法的定义 Ctrl + b 3.复制当前行 Ctrl + d 4.移动当前行 Ctrl + Shift + ( ...

  6. grails 获取domainClassName

    domian截图:

  7. OC 字符串出来

    //1.获取字符串的长度 NSString * str = @"abcd"; NSUInteger length = [str length]; //str.length; NSL ...

  8. 简简单单删除所有.svn目录

    当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除,其实在linux删除这些目录是很简单的,命令如下 find . -type d ...

  9. Spring MVC单选按钮

    以下示例显示如何在使用Spring Web MVC框架的表单中使用单选按钮(RadioButton).首先使用Eclipse IDE来创建一个WEB工程,并按照以下步骤使用Spring Web Fra ...

  10. Laravel5.1 Middleware中间件(初级)

    中间件?什么鬼? 大家第一次接触这个词都会有这么个疑问,但它其实没那么神秘. 一句话就可以解释它:过滤HTTP请求专用机制. 为什么要使用中间件? 过滤HTTP请求是可以写在别的地方,比如说控制器中 ...