Django 中间件

2019-05-03  本文已影响0人  水君子Z

Django内置了一些中间件函数,方便我们在不同的时机,做一些相对的处理。
由于我是做前端的,学了中间件感觉跟vue中的生命周期钩子有些类似。
首先要做的是:在应用文件夹下新建一个 middleware.py 文件,我是跟views.py放在同一个目录


图片.png

在新创建的文件中定义一个类,继承object

class BlockMiddleware(object):
    '''中间件类'''
    def __init__(self):
        print('-'*20)
        print('init函数调用,是在接收第一个请求时')

    def process_request(self,request):
        print('-' * 20)
        print('process_request函数调用,是在产生request对象之后,url匹配之前')

    def process_view(self,request,view_func,*view_args,**view_kwargs):
        print('-' * 20)
        print('process_view函数调用,是在url配置调用之后,视图调用之前')

    def process_response(self,request,response):
        print('-' * 20)
        print('process_response函数调用,是在视图函数调用之后,内容返回浏览器之前')
        return response

然后在settings.py文件下注册刚刚写的类


图片.png

接下来运行程序会发现函数被依次调用


图片.png
注意点:
from django.http import HttpResponse
class BlockMiddleware(object):
    '''中间件类'''
    def __init__(self):
        print('-'*20)
        print('init函数调用,是在接收第一个请求时')

    def process_request(self,request):
        # 需要注意的是如果这里被return 那么django接下来会忽略url配置、process_view与调用view
        # 直接跳到 process_response 函数去执行
        print('-' * 20)
        print('process_request函数调用,是在产生request对象之后,url匹配之前')
        return HttpResponse('<p>跳出</p>')

    def process_view(self,request,view_func,*view_args,**view_kwargs):
        # 需要注意的是如果这里被return 那么django不会调用view
        # 直接跳到 process_response 函数去执行
        print('-' * 20)
        print('process_view函数调用,是在url配置调用之后,view视图调用之前')

    def process_response(self,request,response):
        print('-' * 20)
        print('process_response函数调用,是在视图函数调用之后,内容返回浏览器之前')
        return response

这里修改了process_request函数,return了一个p标签。
然后可以看到,输出顺序和页面的显示都发送了变化:

图片.png
图片.png
上一篇 下一篇

猜你喜欢

热点阅读