1、中间件
1、1中间 :
1、2 django中的中间件:
(1)中间件的代码可以放在任何能够被找到的路径下,但是最好定义在app下。
(2)django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。
(3)在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件.
(4)中间件就是一个可调用的对象,它会接受一个request并且返回一个请求
(5)一个中间件也可以是一个函数
1、3 中间件的结构:
中间件中可以定义5个方法,分别是:
(1)process_request(self,reque会更好st) :
执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
(2)process_view(self, request, callback, callback_args, callback_kwargs):
调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
(3)process_template_response(self,request,response):
在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象
(4)process_exception(self, request, exception)
当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
(5)process_response(self, request, response)
所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
1、4 中间的执行顺序:
请求以自上而下的顺序通过所有的层,view函数处理之后,响应以自下而上的顺序通过所有的层,期间经过的每个中间件都会对请求或者响应进行处理。(在MIDDLEWARE中导入中间件的全路径)
***1、5 中间件的小案例(用函数来进行定义中间件)------第一种方式定义中间件
(1)实现只有火狐浏览器才可以访问服务器(通过user_agent来进行操作)
(2)首先在app下随意定义一个py文件来进行写中间件的。
(3)注册(激活)定义的简单的中间件,在项目目录下的settings下进行
1、6 用类来进行定义中间件------第二种方式定义中间件
1、7 第三种方式定义中间件(已经不用了,最多用的是第二种)
注意: 中间的三种方法可以放到第二种定义的中间件的__call__魔术方法中。
2、上下文处理器
2、1 上下文处理器的引入:
(1)在模板中想要使用的变量是从视图函数中的context这个上下文的参数中传递进来的,每个视图函数需要什么参数就传什么参数.
(2)上下文处理器就是创建模板变量.
(3)在settings.py中,包含了当前使用的上下文处理器。他的作用是可以给每一个模板都提供相同的变量
(4)上下文处理器就是一个python的函数
2、2 自定义上下文处理器例子:
(1)自定义
(2)注册
****注意:当视图函数中也有name属性的时候,他会覆盖掉我们自定义标签中的name所对应的值。