day060 中间件及session源码
本节内容:
1、中间件的概念
2、自定义中间件
3、中间件的方法存在返回值的执行结果(结合整个流程图来对比看)
4、session源码解析(详细过程)
一、中间件的概念
1、是介于request与response处理之间的一道处理过程,相对比较轻量级。
2、正常情况下,所有进入Django项目的request请求都要逐一经过每一个中间件,
出去的response也要逐一经过每一个中间件。
3、由上面可以得出,中间件是在全局上改变Django的输入和输出。
因为是改变全局,所以要谨慎使用,用的不好会影响性能。
对比使用,例如:登录的示例
个人首页要登录后才能查看,这时是使用装饰器好,还是中间件限制游客?
看比例,如果你的视图函数都是要登录后,才能执行的,这是当然选择中间件。
反之则是,选择装饰器,用语法糖。
1、Django默认的Middeware
每一个中间件都具有具体的功能。
2、Django项目的整个请求与响应流程图(详解)重点
二、自定义中间件
当用户发起请求的时候会依次经过所有的的中间件,这个时候的请求时process_request,
最后到达views的函数中,views函数处理后,在依次穿过中间件,
这个时候是process_response,最后返回给请求者。
1、首先介绍中间件中仅有的四个方法:
2、我们自定义中间件
上述截图中的中间件都是django中的,我们也可以自己定义一个中间件,
我们可以自己写一个类,但是必须继承MiddlewareMixin
写在那里无所谓,在settings添加好字符串路径就行
自定义的中间件middleware.py文件
三、中间件的方法存在返回值的执行结果(结合整个流程图来对比看)
1、在request方法中有返回值
如果当请求到达请求2的时候直接不符合条件返回,
即return HttpResponse("Md2中断"),不再执行其他,
程序直接把请求直接发给中间件2返回,然后依次返回到请求者,
1、流程图如下:
2、在process_view方法中有返回值
首先我们要知道process执行的位置,是在所有的request之后,所有的视图函数之前
如果在某一个process_view函数中有返回值,不再执行其他
立即从最后一个response方法开始返回
1、流程图如下:
3、在process_exception中有返回值
首先这里的接收到的错误,是视图函数传递过来的,
若其中一个process_exception方法中有返回值,不再执行其他,
立即从最后一个response方法开始返回