Django - 应用程序特定中间件

13

我知道添加中间件的以下方法: 1)使用 MIDDLEWARE_CLASSES 将自定义中间件组件添加到 Django 中。

MIDDLEWARE_CLASSES = (
     '......'
    'path.to.custom.middlware',)

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

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', )

中间件类是函数或类吗?是否可以使用URL或其他方法来实现?还是只有第二种方法并将所有中间件类单独添加到视图中?

更新: http://python-social-auth.readthedocs.org/en/latest/pipeline.html 就像关于应用程序中所述的那样,SOCIAL_AUTH_PIPELINE仅适用于社交应用程序。这与全局项目设置不同。

先感谢您的帮助。


请参考以下链接,或许可以帮到您:https://dev59.com/G2Ml5IYBdhLWcg3wiXd7 - Mangu Singh Rajpurohit
@user2393267,正如我所要求的那样,它应该是特定于应用程序的。如果我添加中间件,它将适用于 Django 项目中的所有应用程序。 - Wickkiey
可能是django每个应用程序的设置-最佳实践?的重复问题。 - sobolevn
1个回答

6

您想要的方式可能不太可能实现,因为Django不跟踪哪个应用程序的视图来自哪个应用程序。但是,您可以创建一些具有条件的中间件,在其中使用process_view,您可以在此处检查调用了哪个视图,并在视图匹配您的条件(在这种情况下,视图来自特定的应用程序)时执行某些操作。

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


在这个http://python-social-auth.readthedocs.org/en/latest/pipeline.html中,管道是针对特定的(社交)应用程序进行制作的。但是现在我将在process_view中包含条件.. @GwynBleidD 谢谢 :) - Wickkiey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接