zoukankan      html  css  js  c++  java
  • django框架中的中间件

    什么是中间件

    中间件就是在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
    MiddlewareMixin类

    一般在对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  # 创建数据库连接时,自动触发
    View Code
  • 相关阅读:
    hdu4971 流-最大权闭包
    hdu4971 流-最大权闭包
    hdu4950 打怪(简单题目)
    hdu4950 打怪(简单题目)
    hdu4941 map交换行列
    hdu4941 map交换行列
    hdu4966 最小树形图(最少辅导花费)
    hdu4966 最小树形图(最少辅导花费)
    hdu4965 巧用矩阵乘法结合律
    POJ 1077 && HDU 1043 Eight A*算法,bfs,康托展开,hash 难度:3
  • 原文地址:https://www.cnblogs.com/wxp5257/p/7800000.html
Copyright © 2011-2022 走看看