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
  • 相关阅读:
    linux的常用命令
    linux系统环境与文件权限
    MySQL常用数据类型
    【bzoj4641】基因改造 特殊匹配条件的KMP
    【bzoj4550】小奇的博弈 博弈论+dp
    【bzoj3991】[SDOI2015]寻宝游戏 树链的并+STL-set
    【bzoj1304】[CQOI2009]叶子的染色 树形dp
    【bzoj4715】囚人的旋律 dp
    【bzoj4008】[HNOI2015]亚瑟王 概率dp
    【bzoj4444】[Scoi2015]国旗计划 倍增
  • 原文地址:https://www.cnblogs.com/wxp5257/p/7800000.html
Copyright © 2011-2022 走看看