Django - 特定于应用程序的中间件

时间:2015-11-09 08:03:04

标签: python django django-settings django-middleware

我知道以下添加中间件的方法 1)使用MIDDLEWARE_CLASSES

向django添加自定义中间件组件
MIDDLEWARE_CLASSES = (
     '......'
    'path.to.custom.middlware',)

2)使用decorate_from_middlware

添加特定于视图的中间件
cache_page = decorator_from_middleware(CacheMiddleware)

@cache_page(3600)
def my_view(request):
    pass

我的请求是如何创建特定于应用程序的中间件类,如

APPSPECIFIC_MIDDLEWARE_CLASSES = ( 'path.to.middlwareclass1',
 'path.to.middlwareclass2',
 'path.to.middlwareclass3', )

middlwareclass是函数还是类? 有没有使用url或任何其他方法来做到这一点。或者第二种方法是唯一的方法,并将所有中间件类分别添加到视图中?

更新: http://python-social-auth.readthedocs.org/en/latest/pipeline.html 与about应用程序一样,SOCIAL_AUTH_PIPELINE仅适用于社交应用程序。这与全球项目设置不同..

先谢谢

1 个答案:

答案 0 :(得分:3)

这可能不是您想要的方式,因为django不会跟踪哪个视图来自哪个应用程序。但是您可以在process_view内创建一些条件中间件,您可以在这里查看正在调用的视图,并在视图符合您的条件时执行某些操作(在这种情况下,视图来自特定的应用程序)。

另一种方法是,如果您使用基于类的视图,请在应用程序中创建一些视图mixin或基本视图,使用中间件进行装饰,并在应用程序的每个视图中使用它。