Django-中间件

我在项目目录下建立了一个中间件mymiddleware.py

settings.py

在 MIDDLEWARE或者MIDDLEWARE_CLASSES,每个中间件组件都由一个字符串表示: 到中间件工厂的类或函数名的完整 Python 路径。 例如,下面是 django-admin startproject 创建的默认值:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'new_django.mymiddleware', # 激活中间件
)

编写mymiddleware.py下的MyMiddleware类

class MyMiddleware(object):
    def __init__(self):
        """
        工厂必须接受一个中间件get_响应论点。您也可以初始化一些全局状态的中间件。记住一些说明:
        Django初始化你的中间件只使用get_response,所以你不能定义__init__()如需要任何其它参数。
        不像__call__() 每个方法调用一次请求,__init__()仅调用一旦当启动Web服务器。

        """
        print("这是一个__init__")

    def process_view(self, request,view_FUNC,view_args,view_kwargs):
        """
        它应该返回 None 或者 httpreponse 对象。
        如果返回 None,Django 将继续处理这个请求,
        执行任何其他的 process view ()中间件,然后执行相应的视图。
        如果它返回一个 HttpResponse 对象,
        Django 将不再需要调用适当的视图; 它会将响应中间件应用于该 HttpResponse 并返回结果。
        """
        print("这是一个process_view")

    def process_exception(self, request, exception):
        """
        一般和raise Exception("错误信息")一起用
        请求是一个 HttpRequest 对象。 Exception 是由 view 函数引发的 Exception 对象。
        Django 在视图引发异常时调用 process exception ()。
        Process exception ()应该返回 None 或者 HttpResponse 对象。
        如果返回一个 HttpResponse 对象,那么将应用模板响应和响应中间件并将结果响应返回给浏览器。
        否则,将启动默认异常处理。
        同样,中间件在响应阶段以相反的顺序运行,其中包括进程异常。
        如果异常中间件返回响应,则根本不会调用该中间件上面的中间件类的流程异常方法。
        """

        print("这是一个process_exception")

    def process_template_response(self, request, response):
        """
        请求是一个 HttpRequest 对象。
        Response 是由 Django 视图或中间件返回的 TemplateResponse 对象(或等效对象)。
        如果响应实例有一个 render ()方法,
        指示它是一个 TemplateResponse 或等效的方法,则在视图执行完毕后立即调用流程模板响应()。
        它必须返回一个实现呈现方法的响应对象。
        它可以通过更改 response.template 名称和 response.context 数据来更改给定的响应,
        也可以创建并返回一个全新的 TemplateResponse 或类似的数据。
        您不需要显式地呈现响应——一旦调用了所有模板响应中间件,响应将自动呈现。
        中间件在响应阶段以相反的顺序运行,其中包括过程模板响应()。
        """
        print("这是一个process_template_response")
原文地址:https://www.cnblogs.com/Python-XiaCaiP/p/10121508.html