除前面说的基础请求/响应中间件模式外,你可以给基于类的中间件添加三种其他特殊方法:
request 是一个 HttpRequest 对象。view_func 是一个 Django 将要使用的 Python 函数。(这是一个真实的函数对象,不是函数的名称);view_args 是一个用来传递给视图的位置参数列表,;view_kwargs 是一个用来传递给视图的关键字参数字典。view_args 和 view_kwargs 都不包含第一个视图参数 ( request )。
process_view() 只在 Django 调用视图前被调用。
它应该返回 None 或 HttpResponse 对象。如果它返回 None ,Django 将继续处理这个请求,执行任何其他的 process_view() ,然后执行相应的视图。如果它返回 HttpResponse 对象,Django 不会去影响调用相应的视图;它会将响应中间件应用到 HttpResponse 并返回结果。
注解:在视图运行前或在 process_view() 内访问中间件里的 request.POST 将阻止中间件之后运行的任何视图修改请求的上传处理程序 (modify the upload handlers for the request ),通常应该避免这样。
CsrfViewMiddleware 类可以被视为一个例外,因为它提供 csrf_exempt() 和 csrf_protect() 装饰器,它们允许视图完全控制 CSRF 验证在什么时候进行。
request 是一个 HttpRequest 对象。 exception 是一个由视图函数引发的 Exception 对象。
当视图引发异常时,Django 会调用 process_exception()。process_exception() 应该返回 None 或 HttpResponse 对象。如果它返回一个 HttpResponse 对象,模板响应和响应中间件将被应用且会将结果响应返回浏览器。否则,就会开始默认异常处理( default exception handling )。
再次,中间件在响应阶段会按照相反的顺序运行,其中包括 process_exception 。如果异常中间件返回一个响应,那么中间件之上的中间件类的 process_exception 方法根本不会被调用。
request 是一个 HttpRequest 对象。response 是 TemplateResponse 对象(或者等效对象),它通过 Django 视图或中间件返回。
process_template_response() 在视图被完全执行后调用,如果响应实例有 render() 方法,表明它是一个 TemplateResponse 或等效对象。
它必须返回一个实现了 render 方法的响应对象。它可以通过改变response.template_name和 response.context_data 来改变给定的 response ,或者它可以创建和返回全新的 TemplateResponse 或等效对象。
你不需要显式地渲染响应——一旦所有模板中间件被调用,响应会被自动渲染。
中间件会在响应阶段按照相反的顺序运行,其中包括 process_template_response() 。
备案信息: 粤ICP备15087711号-2
Copyright © 2008-2024 啊嘎哇在线工具箱 All Rights.
本站所有资料来源于网络,版权归原作者所有,仅作学习交流使用,如不慎侵犯了您的权利,请联系我们。