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,这样就省得在多个视图函数上写装饰器了!

 

posted @ 2018-09-06 12:33  Anatkhq  阅读(216)  评论(0编辑  收藏  举报