Django - 特定于应用程序的中间件
Posted
技术标签:
【中文标题】Django - 特定于应用程序的中间件【英文标题】:Django - application specific middleware 【发布时间】:2016-02-09 20:09:52 【问题描述】:我知道以下添加中间件的方法 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 仅适用于社交应用程序。这与全局项目设置不同..
提前致谢
【问题讨论】:
参考这个,也许对你有帮助。 ***.com/questions/18322262/… @user2393267 正如我所要求的,它应该是特定于应用程序的。如果我添加中间件,它将适用于 django 项目中的所有应用程序。 django settings per application - best practice?的可能重复 【参考方案1】:这可能无法以您想要的方式实现,因为 django 不会跟踪来自哪个应用程序的视图。但是您可以在process_view
中创建一些带有条件的中间件,您可以在此处检查正在调用的视图并在视图符合您的条件时执行某些操作(在这种情况下,视图来自特定的应用程序)。
如果您使用基于类的视图,另一种方法是在您的应用程序中创建一些视图混合或基本视图,用您的中间件装饰它并在您的应用程序的每个视图中使用它。
【讨论】:
在这个python-social-auth.readthedocs.org/en/latest/pipeline.html 中,管道是特定于特定(社交)应用程序的。但是现在我将在 process_view 中包含条件.. @GwynBleidD 谢谢:)以上是关于Django - 特定于应用程序的中间件的主要内容,如果未能解决你的问题,请参考以下文章
带有 smtp.gmail SMTPAuthenticationError 534 的 Django 电子邮件需要特定于应用程序的密码
javascript NodeJs ExpressJS中间件,允许特定于bot / crawler的路由。基于OS项目的Prerender.IO中间件用于节点。