什么是中间件,在settings.py中有很多的中间件,主要是用来做什么功能的呢,他们处理请求的url的过程在那些阶段呢,一般用来做那些数据的处理呢
我大致的理解就是说在处理某些信息的时候首先处理他,处理完了在处理接下来的信息,并且相同类型的信息都是需要先进行处理的,这就可以看出在验证用户的cookie可以用到中间键
下列就是参考图
中间键的处理函数
__init__:没有参数,在服务器响应的第一个请求的时候自动调用,用户确定时候启动该中间件
process_request(self, request): 在执行视图前被调用,每个请求上都会被调用,不主动进行返回或返回HttpResponse对象
process_view(self, request, view_func,view_args, view_kwargs):调用视图之前执行,每个请求都会调用,不主动进行返回或返回HttpResponse对象
process_template_response(self, request, response):在视图刚好执行完后进行调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象
process_response(self, request, response):所有响应返回浏览器之前调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象
process_exception(self, request, exception):当视图抛出异常时调用,不主动进行返回或返回HttpResponse对象
具体流程:
1. 创建文件夹(例如utils)
2. 在文件中创建python文件(比如UserAuthMiddleware)
3. 根据需求写入类重点写入切入的函数方法
比如定义每次页面都要验证用户cookie值
from django.http import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin
from uauth.models import Users
class AuthMiddleware(MiddlewareMixin):
def process_request(self, request):
# 统一验证登录
# return None或者不写就不执行以后的操作
if request.path == '/uau/re/':
return None
#写法二如果不需要验证的页面也可以!=
if request.path !='/uau/lo/':
ticket = request.COOKIES.get('ticket')
if not ticket:
#在浏览器中没有值返回登录页面
return HttpResponseRedirect('/uau/lo/')
users = Users.objects.filter(u_ticket=ticket)
if not users:
#在服务器中没有返回登录页面
return HttpResponseRedirect('/uau/lo')
# 登录信息都放这里面
request.user = users[0]
4.在seting中添加中间键
MIDDLEWARE=【'utils(文件名).UserAuthMiddleware(python名字).AuthMiddleware(类名字)'】