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))
  • 相关阅读:
    ios UIImageView
    ios UILable
    [leetCode]116. 填充每个节点的下一个右侧节点指针
    [leetCode]1002. 查找常用字符
    [leetCode]199. 二叉树的右视图
    [leetCode]784. 字母大小写全排列
    [leetCode]1297. 子串的最大出现次数
    [leetCode]1239. 串联字符串的最大长度
    1095. 山脉数组中查找目标值
    [leetCode]1235. 规划兼职工作
  • 原文地址:https://www.cnblogs.com/hexintong/p/10109339.html
Copyright © 2011-2022 走看看