14-中间件和上下文处理器

14-中间件和上下文处理器

01-中间件

02-上下文处理器

01-中间件

在http请求 到达视图函数之前   和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

中间件的执行流程

1、执行完所有的request方法 到达视图函数。

2、执行中间件的其他方法

2、经过所有response方法 返回客户端。

注意:如果在其中1个中间件里 request方法里 return了值,就会执行当前中间的response方法,返回给用户 然后 报错。。不会再执行下一个中间件。

也就是说,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回前者,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上。

中间件中可以定义4个方法,分别是:

  1. process_request(self,request) 发送请求
  2. process_view(self, request, callback, callback_args, callback_kwargs) 执行完 request 预处理函数并确定待执行的 view 之后,但在 view 函数实际执行之前。
  3. process_template_response(self,request,response)
  4. process_exception(self, request, exception) 收集错误信息
  5. process_response(self, request, response) 必须返回 HttpResponse 对象. 这个 response 对象可以是传入函数的那一个原始对象(通常已被修改),也可以是全新生成的。

执行顺序也是按照以上顺序执行的.

 中间件注册

中间件例子

 

原文地址:https://www.cnblogs.com/jun-1024/p/10860887.html

时间: 2024-10-19 23:48:37

14-中间件和上下文处理器的相关文章

中间件和上下文处理器、djangoAdmin

中间件 中间件代码放到python任意的地方,能找到导入就行,这里放到app里 创建middleware.py文件,中间件的两种方法 #一个中间件是一个可调用的对象,接受一个request,返回一个请求 #第一种:一个中间件可以是一个函数 #实现功能:利用中间件实现:只有谷歌浏览器才让访问 通过user_agent区分 from django.http import HttpResponseForbidden def simple_middleware(get_response):#参数必须是g

理解JavaScript中的作用域和上下文

JavaScript对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性. 函数可以接收不同的的上下文和作用域.这些概念为JavaScript中的很多强大的设计模式提供了坚实的基础. 然而这也概念也非常容易给开发人员带来困惑.为此,本文将全面的剖析这些概念,并阐述不同的设计模式是如何利用它们的. Statement 作者: 景庄,Web开发者,主要关注JavaScript.Node.js.React.Docker等. 原文地址: htt

JavaScript的作用域(Scope)和上下文(Context)

JavaScript对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性. 函数可以接收不同的的上下文和作用域.这些概念为JavaScript中的很多强大的设计模式提供了坚实的基础. 然而这也概念也非常容易给开发人员带来困惑.为此,本文将全面的剖析这些概念,并阐述不同的设计模式是如何利用它们的. 作用域(Scope)和上下文(Context) 首先需要知道的是,上下文和作用域是两个完全不同的概念.多年来,我发现很多开发者会混淆这两个概念

NLog路由规则和上下文信息

NLog配置路由规则和上下文信息 rules: 规则节点 logger:一个路由规则 <rules> <!--<logger name="*" writeTo="console" />--> <logger name="*" minlevel="Debug" writeTo="debugger" /> <logger name="*"

Spring Boot 中修改端口和上下文路径

通过修改application.properties内容来改变访问的端口号和上下文路径(很简单!) spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp server.port=9090 server.context-path=/test 访问路径为:http://127.0.0.1:9090/test/hello 效果图: 原文地址:https://www.cnblogs.com/zs-notes/p/9366147.

with和上下文管理器

with和上下文管理器 如果你有时间阅读源码的习惯,可能会看到一些优秀的代码会出现带有with关键字的语句. 对于系统资源如文件,数据库连接,socket而言,应用程序打开这些资源并执行完业务逻辑之后,必须要做的事情就是关闭该资源. 在上篇文件中,我们读写文件操作,完毕之后,关闭文件对象.调用close方法,下面来看看如何正确的关闭一个文件. 普通版 def func(): f = open("1.txt", "w") f.write("Python&qu

中间件与路由处理器

路由处理器和中间件的参数中都有回调函数,这个函数有2个3个或4个参数.如果有2个或3个参数,前两个参数是请求和响应对象,第三个参数是next函数.如果有4个参数,它就变成了错误处理中间件,第一个参数变成了错误对象,然后依次是请求.响应和next对象.如果不调用next(),管道就会被终止,也不会再有处理器或中间件做后续处理,此时应该发送一个响应到客户端. var app = require('express')(); let i=1; app.use(function(req, res, nex

Android选项菜单和上下文菜单解析

选项菜单 创建选项菜单 Activity类的onCreateOptionMenu事件方法用来创建选项菜单,该方法定义如下: @Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); } 一般需要将创建选项菜单的代码放在onCreateOptionMenu方法中.通过Menu.add方法可以添加一个选项菜单.该 方法有4种重载形式,定义如下: public Me

Django之上下文处理器

上下文处理器是用来返回一些在全局模板中都可以使用的数据,比如登入后的用户信息,在很多页面中都需要使用,那么我们可以放在上下文处理器中,就没有必要在每个视图函数中都返回这个对象了. 步骤1:在APP内新建一个python文件(或者单独创建一个python包用来管理所有的上下文处理器) 步骤2:在python文件中定义个函数,只有一个参数(request),函数中处理完自己的逻辑后,把需要返回的数据通过字典的形式返回,如果没有数据返回就返回一个空字典. 步骤3:在setting中注册(TEMPLAT