zoukankan      html  css  js  c++  java
  • 中间键应用

    ########## 中间键

    请求-中间键-路由-视图-数据库-模版-视图-中间键-响应

    对所有请求做操作的时候,比如IP访问,我们利用中间键屏蔽IP

    对某几个函数做操作,可以用装饰器 

    登陆 crsf 日志 都可以写在中间键里 

    中间键是一个类

    请求的方法—press_request

    响应的方法—prcess_response

    ###########  Settings 配置

    1 SJF = "user_info"
    2 
    3 MIDDLEWARE = [
    4     'md.md.M1',
    5     'md.md.M2',
    6 ]

    ###########  中间键的创建

     1 ########### 继承的类,可以直接粘贴过去用
     2 class MiddlewareMixin(object):
     3     def __init__(self, get_response=None):
     4         self.get_response = get_response
     5         super(MiddlewareMixin, self).__init__()
     6 
     7     def __call__(self, request):
     8         response = None
     9         if hasattr(self, 'process_request'):
    10             response = self.process_request(request)
    11         if not response:
    12             response = self.get_response(request)
    13         if hasattr(self, 'process_response'):
    14             response = self.process_response(request, response)
    15         return response
    16 
    17 ########### 自定义的中间键,要继承 MiddlewareMixin
    18 class M1(MiddlewareMixin):
    19 
    20     def process_request(self,request):
    21           print('m1.process_request')
    22         return None # 默认就是None,结束当前,继续下面代码
    23 
    24     def process_response(self,request,response):
    25         print('m1.process_response')
    26         return response
    27 
    28 
    29 class M2(MiddlewareMixin):
    30 
    31     def process_request(self,request):
    32         print('m2.process_request')
    33 
    34     def process_response(self,request,response):
    35         print('m2.process_response')
    36         return response
    37 
    38 执行顺序,m1.request m2.request m2.response m1.response
    39 如果 m1 没有response 执行顺序
    40           m1.request m2.request m2.response 
    41 如果 m1 的response 直接返回了 执行顺序
    42         m1.request  m1.response

    实例,通过中间键判断用户是否登陆

     1 可以直接在m1.request里面判断请求过来session里面是否有这个用户,没有直接返回登陆
     2 from django.conf import settings
     3 from django.shortcuts import redirect
     4 
     5 ########### 继承类
     6 class M1(MiddlewareMixin):
     7 
     8     def process_request(self,request):
     9         # 无返回值:继续执行后续中间件和视图函数
    10         # 有返回值:执行自己的process_response和上面的response
    11         # request.xxxx= str: 添加数据,那么每次request里面都会有这个数据
    12         if request.path_info == "/login/":
    13             return None # 结束当前,继续后面的代码 m2.request m2.response ……
    14 
    15         user_info = request.session.get(settings.SJF)
    16         if not user_info:
    17             return redirect('/login/') # 注意重定向次数过多
    18 
    19 
    20     def process_response(self,request,response):
    21         print('m1.process_response')
    22         return response
    23 
    24 注意:
    25     settings 中间键顺序,自己写的不要写默认的上边,日志可以写在上面,都可以记录包括默认的
  • 相关阅读:
    2018-8-10-win10-uwp-商业游戏-1.2.1
    2018-8-10-win10-uwp-商业游戏-1.2.1
    2019-3-1-获取-Nuget-版本号
    2019-3-1-获取-Nuget-版本号
    2019-9-24-dotnet-remoting-抛出异常
    2019-9-24-dotnet-remoting-抛出异常
    2018-2-13-C#-解析-sln-文件
    2018-2-13-C#-解析-sln-文件
    2018-10-19-jekyll-添加-Valine-评论
    2018-10-19-jekyll-添加-Valine-评论
  • 原文地址:https://www.cnblogs.com/jokerbj/p/8173820.html
Copyright © 2011-2022 走看看