什么是中间件(middleware)
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。
在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件
- 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',
- 'common.middleware.auth.AuthMiddleware', ----自定义的
- 'common.middleware.oplog.OperationLogMiddleware',
- ]
自定义中间件:
1、中间件中可定义的1个或多个方法:
- process_request(self,request) 发送请求
- process_view(self,request, view_func, view_args, view_kwargs) views 函数处理
- process_template_response(self,request, response)
- process_exception(self,request, exception) 异常处理,views报错才执行
- process_response(self,request, response) 返回结果
2、创建中间件类
a、新建1个 XXX 包 或文件夹
b、新1个 AAA.py 模块
c、在 AAA.py 中 写如下面 一个类,类包含 如下一个或多个函数,函数名称和参数不能改变
d、导入中间件模块,from django.utils.deprecation import MiddlewareMixin
- # -*- coding: utf-8 -*-
-
- from django.utils.deprecation import MiddlewareMixin
- from django.shortcuts import redirect, render_to_response
- from apps.models import *
- from common.utils.account import is_authenticated, get_admin_privileges
-
-
- class AuthMiddleware(MiddlewareMixin):
- def process_view(self, request, view_func, view_args, view_kwargs):
- view_name = view_func.__name__
-
- if view_name in ['login','web_hooks']:
- return None
-
- if not is_authenticated(request):
- return redirect('login')
-
- request.session['current_view_name'] = view_name
-
- if view_name in ['index', 'profile', 'logout','test']:
- return None
-
- self.add_operation_log(request, view_name)
-
- admin_id = request.session['current_admin_id']
- admin = Admin.objects.get(id=admin_id)
- if admin.role_id == Role.ROLE_SUPPER:
- return None
- ....
3、注册这个中间件
在settings.py 中 MIDDLEWARE ,注册这个中间件
- MIDDLEWARE = [
- 'common.middleware.auth.AuthMiddleware',
- ]
利用中间键来做IP过滤
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse,render
blacklist = [
'127.0.0.1',
'192.168.0.102',
]
class IpInterceptor(MiddlewareMixin):
def process_request(self,request):
if request.META.get('REMOTE_ADDR',None) in blacklist:
return HttpResponse("非法用户")
# return render(request,'index.html')
else:
return None
from django.shortcuts import HttpResponse,render
blacklist = [
'127.0.0.1',
'192.168.0.102',
]
class IpInterceptor(MiddlewareMixin):
def process_request(self,request):
if request.META.get('REMOTE_ADDR',None) in blacklist:
return HttpResponse("非法用户")
# return render(request,'index.html')
else:
return None
c
参考:
https://my.oschina.net/esdn/blog/825194
http://www.cnblogs.com/zhaof/p/6281541.html
https://my.oschina.net/esdn/blog/825194
http://www.cnblogs.com/zhaof/p/6281541.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-2146162/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29096438/viewspace-2146162/