中间件与装饰器

Django自定义中间件

首先在settings.py文件中的MIDDLEWARE导入自定义的中间件类名

MIDDLEWARE = [    
'django.middleware.security.SecurityMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    'corsheaders.middleware.CorsMiddleware',  
......
# 加载自定义中间件   文件夹名.文件名.类名    根据自己的路径来导入类名
'myapp.md_user.MyMiddleWare'

view视图文件中导入MIddlewareMimin 定义类 之后就可以根据自己的需求在对应的函数中写入逻辑

# 自定义中间件
from django.utils.deprecation import MiddlewareMixin

class MyMiddleWare(MiddlewareMixin):
    # 请求之前
    def process_request(self, request):
        pass
    # 模板渲染之前
    def process_view(self, request, view_func, view_args, view_kwargs):
        pass
    # 请求之后
    def process_response(self, request, response):
        return response
    
$中间件的5种方法
1、process_request : 请求进来时,权限认证 。

2、process_view : 路由匹配之后,能够得到视图函数

3、process_exception : 异常时执行

4、process_template_responseprocess : 模板渲染时执行

5、process_response : 请求有响应时执行




装饰器

装饰器原理是函数嵌套,闭包运行.内部函数调用外部函数的变量或返回值

def my_decorator(func):
    # request 是django框架需要携带的
    def wrapper(request, *args, **kwargs):
        print('这个装饰器被调用')
        print('请求接口地址是:%s'%request.path)
        return func(request, *args, **kwargs)
    return wrapper
#如果是给函数添加装饰器,直接在函数上方添加即可
#如果是给类视图中的函数添加如下
from django.utils.decorators import method_decorator

class UserInfo(APIView):
    #使用method_decortor方法就可以给类视图的函数添加装饰器
    @method_decorator(my_decorator)
    def get(self, request):
        ......
        return Response()

你可能感兴趣的:(中间件与装饰器)