创新互联Django4.0教程:Django4.0 中间件-其他中间件钩子

除前面说的基础请求/响应中间件模式外,你可以给基于类的中间件添加三种其他特殊方法:

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、重庆小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了赞皇免费建站欢迎大家使用!

process_view()

process_view(request, view_func, view_args, view_kwargs)

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​验证在什么时候进行。

process_exception()

process_exception(request, exception)

request​是一个 ​HttpRequest​对象。 ​exception​是一个由视图函数引发的 ​Exception​ 对象。
当视图引发异常时,Django 会调用 ​process_exception()​。​process_exception()​ 应该返回 ​None​或 ​HttpResponse​对象。如果它返回一个 ​HttpResponse​对象,模板响应和响应中间件将被应用且会将结果响应返回浏览器。否则,就会开始默认异常处理( ​default exception handling​ )。
再次,中间件在响应阶段会按照相反的顺序运行,其中包括 ​process_exception​。如果异常中间件返回一个响应,那么中间件之上的中间件类的 ​process_exception​方法根本不会被调用。

process_template_response()

process_template_response(request, response)

request​是一个 ​HttpRequest​对象。​response​是 ​TemplateResponse​对象(或者等效对象),它通过 Django 视图或中间件返回。
process_template_response()​ 在视图被完全执行后调用,如果响应实例有 ​render()​ 方法,表明它是一个 ​TemplateResponse​或等效对象。
它必须返回一个实现了 ​render​方法的响应对象。它可以通过改变​response.template_name​和 ​response.context_data​ 来改变给定的 ​response​,或者它可以创建和返回全新的 ​TemplateResponse​或等效对象。
你不需要显式地渲染响应——一旦所有模板中间件被调用,响应会被自动渲染。
中间件会在响应阶段按照相反的顺序运行,其中包括 ​process_template_response()​ 。

新闻标题:创新互联Django4.0教程:Django4.0 中间件-其他中间件钩子
地址分享:http://www.shufengxianlan.com/qtweb/news43/119593.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联