zoukankan      html  css  js  c++  java
  • 10.中间键Middleware

    中间键Middleware

    01.中间件顾名思义:
      是介于request与response处理之间的一道处理过程,相对比较轻量级,
      并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能。

    02.自定义中间件

      中间件中一共有四个方法:
        process_request
        process_view
        process_exception
        process_response

      <1>创建一个中间键.py文件

     1 from django.utils.deprecation import MiddlewareMixin
     2 class CustomerMiddleware(MiddlewareMixin):
     3 
     4 def process_request(self, request):
     5 # 请求发出后,进入,没有返回值
     6 print("CustomerMiddleware process_request")
     7 #return HttpResponse("process_request中断")
     8 
     9 def process_response(self, request, response):
    10 # 视图函数走完之后进入,必须有返回值
    11 print("CustomerMiddleware process_response")
    12 return response # 返回的response必须加返回值,否则会报错
    13 
    14 def process_view(self, request, callback, callback_args, callback_kwargs):
    15 #走过视图之后进入_view
    16 print("Md1view")
    17 
    18 def process_exception(self, request, exception):
    19 # 如果视图函数有错误,则走_exception,加参数exception进行错误捕获,
    20 # 捕获后将执行process.response
    21 print("md1 process_exception...")
    22 return HttpResponse(exception)

      <2>在settings.py中添加自己的中间键所在的地址

    发起请求 proccess_request 从上到下依次经过中间键middleware
    MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'app01.my_middlewares.CustomerMiddleware' # 添加自己的中间键:路径.文件名.类名
    ]
    视图函数views process_response 从下到上依次经过中间键middleware


    03.应用案例

    1、做IP访问频率限制
    某些IP访问服务器的频率过高,进行拦截,比如限制每分钟不能超过20次。

    2、URL访问过滤
    如果用户访问的是login视图(放过)
    如果访问其他视图,需要检测是不是有session认证,已经有了放行,没有返回login,这样就省得在多个视图函数上写装饰器了!

  • 相关阅读:
    mysql数据库汉字首字母简拼全拼
    window.showModalDialog刷新父窗口和本窗口的方法及注意
    c#.net语句e.Row.RowType == DataControlRowType.DataRow是什么含义?
    SQL 拿到一天内的数据
    在线脚本编辑器
    输入正确的邮箱地址
    jquery中的$(document).ready()方法和window.onload方法区别
    转载从XML文件中读取数据绑定到DropDownList
    GridView中DropDownList联动
    For 循环 和Foreach 的区别
  • 原文地址:https://www.cnblogs.com/QQL-anatkh/p/9597685.html
Copyright © 2011-2022 走看看