专题13:Django之中间件

1、中间件的定义

专题13:Django之中间件_第1张图片

举例(实际上中间件不仅仅只在这三个地方触发):

专题13:Django之中间件_第2张图片

2、编写中间件

对于新手来说,重点就是前三个,即:process_request, process_view和process_response

专题13:Django之中间件_第3张图片 

大多数情况下,如果中间件返回的是None,则说明request是OK的,可以进入下一个环节了,而如果返回HttpResponse对象,则说明request是有问题的

3、注册中间件

专题13:Django之中间件_第4张图片

实操:

专题13:Django之中间件_第5张图片

 专题13:Django之中间件_第6张图片

专题13:Django之中间件_第7张图片

专题13:Django之中间件_第8张图片

专题13:Django之中间件_第9张图片

专题13:Django之中间件_第10张图片

专题13:Django之中间件_第11张图片

专题13:Django之中间件_第12张图片

4、中间件执行总流程(非常重要,web端面试高频题,必须会)

 面试官问:你讲述一下,请求进到Django直到响应出来都经历了哪些环节?

专题13:Django之中间件_第13张图片

答:经历了中间件的process_request方法,URL(路由),中间件的process_view方法,以及Django的MTV结构。此外,如果请求在进入Django的过程中抛出了异常,则会返回HttpResponse,而所有的HttpResponse都会进入到process_response做最后一道处理,生成最终的响应,返回给浏览器。

详细描述:

浏览器发送一个请求,进入到Django的process_request中间件(按照注册顺序,由上至下逐一调用每一个中间件的process_request方法),此时,有两条路:一条是return None,继续往后走进入到URL,另一条是return HttpResponse,那请求到这里就终止了,直接进入到process_response环节。如果是return None进入到URL路由,从路由出来后就进入到process_view中间件环节,同样是按照注册顺序,由上至下逐一调用每个中间件的process_view方法。这里也是分两条路,一个是return None继续向下走,另一个是return HttpResponse结束。如果是return None,则进入到Django的MTV结构里。如果在视图里面抛出Exception(异常),被process_exception中间件抓到了(注意,在请求进入视图之后,是按照注册顺序反向调用每个中间件的process_exception),则return HttpResponse

5、CSRF攻击(跨站伪造请求攻击)

1)CSRF定义

专题13:Django之中间件_第14张图片

专题13:Django之中间件_第15张图片

2)CSRF防范

专题13:Django之中间件_第16张图片

专题13:Django之中间件_第17张图片

如上图所示,进行CSRF攻击的网站只能从用户浏览器的cookie中获取到暗号2,却没有暗号1,所以攻击不会成功。 

3)CSRF配置步骤

专题13:Django之中间件_第18张图片

实操:

views.py中:

专题13:Django之中间件_第19张图片

urls.py中:

专题13:Django之中间件_第20张图片

settings.py中:

专题13:Django之中间件_第21张图片

专题13:Django之中间件_第22张图片

解决方法:在html文件的form标签下写{% csrf_token %}

专题13:Django之中间件_第23张图片

专题13:Django之中间件_第24张图片 专题13:Django之中间件_第25张图片

专题13:Django之中间件_第26张图片

专题13:Django之中间件_第27张图片

专题13:Django之中间件_第28张图片 

 

你可能感兴趣的:(Django,django,中间件,python,1024程序员节)