您的位置:首页 > 编程语言 > Go语言

Django中的中间件

2018-05-23 08:45 120 查看

今天开发后台管理界面,涉及到Django的中间件。

Middlewares 是修改 Django request 或者 response 对象的钩子。使用中间件,可以干扰整个处理过程,每次请求中都会执行中间件的这个方法。

如果你要去一个公园,需要门票才可进入。而这个售票口一定在公园的外面,或者在公园唯一的对外开放的出口地点,如图:


在一个后台管理界面,在进入前需要先进行管理员或者用户的身份认证,所以在进入后台管理的每个界面,都需要中间件进行拦截。


如何创建一个中间件:

from django.shortcuts import render
from django.http import HttpResponse
import re

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 = ['/admin/login','/admin/dologin','/admin/vcode']
# 判断是否进入了后台,并且不是进入登录页面
if re.match('/admin/',request.path) and request.path not in urllist:

# 检测session中是否存在 adminlogin的数据记录
if request.session.get('Vuser','') == '':
# 如果在session没有记录,则证明没有登录,跳转到登录页面
return HttpResponse('<script>alert("请先登录");location.href="/admin/login";</script>')

response = self.get_response(request)
return response

在创建中间件之后,还需要在settings中注册自定义的中间件,才可以使用:

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.AdminMiddleware.AdminLoginMiddleware'
]


阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: