Django中AOP——面像切片编程

什么是中间件,在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(类名字)'

猜你喜欢

转载自blog.csdn.net/qq_41781877/article/details/80171518
今日推荐