什么是中间件
中间件就是在url进入路由之前进行检测的一个类
也就是说,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回前者,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上。
#django1.11中要继承 MiddlewareMixin这个类
from django.utils.deprecation import MiddlewareMixin
class CommonMiddleware(MiddlewareMixin): def process_request(self, request): return None def process_response(self, request, response): return response
class MiddlewareMixin(object): def __init__(self, get_response=None): self.get_response = get_response super(MiddlewareMixin, self).__init__() def __call__(self, request): response = None if hasattr(self, 'process_request'): response = self.process_request(request) if not response: response = self.get_response(request) if hasattr(self, 'process_response'): response = self.process_response(request, response) return response
一般在对url进行批量处理的时候就要用中间件来完成了
from django.utils.deprecation import MiddlewareMixin
from mywork import settings
class Islogin(MiddlewareMixin): '''
判断是否登录,若没登录就让跳转到登录页面登录,若已经登录就继续执行。
''' def process_request(self,requset): if requset.path_info =="/login/": return None if not requset.session.get(settings.WXP): #用sission判断是否登录 return redirect("/login/") def process_response(self,requset,response): return response
补充 : 在写完中间件后一定要记得在配置文件MIDDLEWARE中进行注册激活。
django内置的信号
Django内置 Request / response signals request_started # 请求到来前,自动触发 request_finished # 请求结束后,自动触发 got_request_exception # 请求异常后,自动触发 Model signals pre_init # django的modal执行其构造方法前,自动触发 post_init # django的modal执行其构造方法后,自动触发 pre_save # django的modal对象保存前,自动触发 post_save # django的modal对象保存后,自动触发 pre_delete # django的modal对象删除前,自动触发 post_delete # django的modal对象删除后,自动触发 m2m_changed # django的modal中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发 class_prepared # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发 Management signals pre_migrate # 执行migrate命令前,自动触发 post_migrate # 执行migrate命令后,自动触发 Test signals setting_changed # 使用test测试修改配置文件时,自动触发 template_rendered # 使用test测试渲染模板时,自动触发 Database Wrappers connection_created # 创建数据库连接时,自动触发