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

Viv*_*han 8 python django django-middleware django-settings

我知道以下添加中间件的方法1)使用MIDDLEWARE_CLASSES向django添加自定义中间件组件

MIDDLEWARE_CLASSES = (
     '......'
    'path.to.custom.middlware',)
Run Code Online (Sandbox Code Playgroud)

2)使用decorate_from_middlware添加视图特定的中间件

cache_page = decorator_from_middleware(CacheMiddleware)

@cache_page(3600)
def my_view(request):
    pass
Run Code Online (Sandbox Code Playgroud)

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

APPSPECIFIC_MIDDLEWARE_CLASSES = ( 'path.to.middlwareclass1',
 'path.to.middlwareclass2',
 'path.to.middlwareclass3', )
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢

Gwy*_*idD 5

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

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