一、关于中间件
在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。中间件有四种方法,如下:
a)process_request
在处理url之前进行逻辑处理
b)process_view
调用views视图之前执行
c)process_templates_response
在视图刚好执行完的时候调用
d)process_response
在响应返回浏览器之前调用
二、实例:登陆验证
1.创建中间件类
中间件类文件一般都存于目录utils中。中间件类需要继承MiddlewareMixin类,根据需要重构四种方法,此处重构process_request方法。
from django.http import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin
from axf_app.models import UserModel
class UserLoginMiddleware(MiddlewareMixin):
def process_request(self, request):
# 若请求的是登陆和注册页面 则往下执行
if request.path == '/axf/login/' or request.path == '/axf/regist/':
return None
ticket = request.COOKIES.get('ticket')
# 若浏览器中不存在ticket 说明用户未登陆 跳转登陆页面
if not ticket:
return HttpResponseRedirect('/axf/login/')
users = UserModel.objects.filter(ticket=ticket)
# 若浏览器中存在ticket 但用户表中没有和其匹配的ticket
# 说明用户未登陆 跳转登陆页面
if not users:
return HttpResponseRedirect('/axf/login/')
request.user = users[0]
注意:如果没有加入第一个if中的路径判断,那么服务器会一直请求login,导致重定向次数过多,所以第一个if判断必须写。
2.注册中间件
在setting.py文件中 MIDDLEWARE 中加上自己写的中间件
MIDDLEWARE = [
'utils.UserMiddleware.UserLoginMiddleware',
]
网友评论