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

    process_request:

    1 是在视图执行前执行的

    2 它的顺序是从上往下执行

    3 返回值是None,继续向后执行

    4 返回值是HttpResponse的对象,执行对应中间件的process_response方法,接着往上走,最后返回给浏览器

    process_response:

    1 是在视图执行后执行的

    2 它的顺序是从下往上执行

    3 返回值必须是HttpResponse对象,继续往上执行

    process_view:

    1 在视图函数执行前执行,在process_request执行后执行

    2 它的执行顺序是从上往下

    3 返回值是None,继续向后执行

    4 返回值是HttpResponse的对象,执行最后一个中间件的process_response方法,接着向上执行,返回给浏览器

     process_exception

    1 报错才执行

    2 在视图函数执行之后,process_response之前

    3 他的顺序是从下往上

    4 返回值是HttpResponse的对象,执行最后一个中间件的process_response方法,接着往上,返回给浏览器

    process_template_response:

    1 视图返回的对象有render方法才执行

    2 在视图函数之后,process_response之前

    3 它的顺序是从下往上

    4 返回值是HttpResponse对象

    5 执行完所有的中间件的process_template_response之后,才执行对象.render()方法,得到一个新的HttpResponse的对象,交给process_response继续执行

    中间件版本的登录验证

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import HttpResponse,redirect
    
    class Auth(MiddlewareMixin):
    
        white_list = ['/login/', ]  # 白名单
        black_list = ['/black/', ]  # 黑名单
        def process_request(self,request):
            user=request.session.get('user')
            url=request.path_info
            if url in self.black_list:
                return HttpResponse('this is a illegal URL.')
            elif url in self.white_list or user:
                return
            else:
                #return redirect('/login/')
                return redirect("/login/?next={}".format(url))
  • 相关阅读:
    923c C. Perfect Security
    hdu ACM Steps Section 1 花式A+B 输入输出格式
    我回来了
    POJ–2104 K-th Number
    bzoj1009: [HNOI2008]GT考试
    bzoj1875: [SDOI2009]HH去散步
    1898: [Zjoi2005]Swamp 沼泽鳄鱼
    Hadoop
    程序员的自我修养
    Effective C++笔记
  • 原文地址:https://www.cnblogs.com/hexintong/p/10109339.html
Copyright © 2011-2022 走看看