django之中间件
django之中间件
中间件帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作;
它本质上就是一个自定义类;可以介入Django的请求和响应处理过程,修改Django的输入或输出.
验证用户是否登录事例:
1.在应用中创建一个AdminLoginMiddleware.py文件:
from django.http import HttpResponse
import re
from django.core.urlresolvers import reverse
class AdminLoginMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# 检测当前的请求是否已经登录,如果已经登录,.则放行,如果未登录,则跳转到登录页
# 获取当前用户的请求路径 /admin/开头 但不是 /admin/login/ /admin/dologin/ /admin/verifycode
urllist = ['/myadmin/login/','/myadmin/verifycode/']
# 判断是否进入了后台,并且不是进入登录页面
if re.match('/myadmin/',request.path) and request.path not in urllist:
# 检测session中是否存在 adminlogin的数据记录
if request.session.get('vipuser','') == '':
# 如果在session没有记录,则证明没有登录,跳转到登录页面
return HttpResponse('<script>alert("请先登录");location.href="/myadmin/login";</script>')
myhomelist = [reverse('myhome_cartadd'),reverse('myhome_cart'),reverse('myhome_cartdel')
,reverse('myhome_cartedit'),reverse('myhome_cartorder'),reverse('myhome_saveadd'),
reverse('myhome_personCenter')]
if request.path in myhomelist:
# 检测用户请求的路径是否在指定列表内
if request.session.get('vipuser','') == '':
# 如果在session没有记录,则证明没有登录,跳转到登录页面
return HttpResponse('<script>alert("请先登录");location.href = "'+reverse("myhome_login")+'"</script>')
response = self.get_response(request)
return response
2.配置中间件
在项目的setting.py文件里将新建的中间件文件加入到中间件项里.
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',
# 自定义中间件
#应用名.文件名.类名
'myadmin.AdminLoginMiddleware.AdminLoginMiddleware'
]

浙公网安备 33010602011771号