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))
  • 相关阅读:
    JavaScript闭包
    JavaScript的作用域与作用域链
    运动曲线提升CSS动画效果
    设计一个应用或网站时的流程
    JavaScript 与函数式编程
    声明式编程与命令式编程
    call(),apply()和bind()
    linux-xargs
    linux -shell
    linux-awk
  • 原文地址:https://www.cnblogs.com/hexintong/p/10109339.html
Copyright © 2011-2022 走看看