看完之后,也觉得Django的middleware很简单,就是一个类,一个过滤器而已。不过似乎不必提供完成四个方法,我看到过的中间件有只实现了process_request和process_response的,其他的两个方法没有定义。

以下转载自:http://fallever.com/blog/jeff/20/

中间件的名堂听起来很大。但在Django里面,中间件实际上就是一个过滤器(像Java的Servlet里面的Filter)。如果你需要在一个 请求到来之后、View函数调用之前、在响应给客户端之前和View函数抛出异常的时候做些什么事情,那么你可以自己写一个中间件。

Django中间件必须是一个类,并实现四个接口,也就是必须提供四个方法:

process_request(self, request),只有一个请求作为参数,该方法在请求到来的时候调用。

process_view(self ,request, fnc , arg ,kwarg),在本次将要执行的View函数被调用前调用本函数。第一个参数为请求,二为将要执行的View函数实例,arg与kwarg分别为参数元组及参数字典。

process_response(self,request,response),在执行完View函数准备将响应发到客户端前被执行。

process_exception(self,request, exception). View函数在抛出异常时该函数被调用,得到的exception参数是实际上抛出的异常实例。通过此方法可以进行很好的错误控制,提供友好的用户界面。

官方指南:

一、中间件不需要继承任何类

二、你的中间件可以放在任何一个地方,当然前提是在Python的Path当中。Django只要在settings.py的MIDDLEWARE_CLASSES中找到它就可以了。

三、可以参考Django现有的中间件。

四、如果你写了些有用的中间件又觉得可以给其他人用,欢迎提交到Django,Django将考虑把它加入项目。