【问题标题】:Apply decorator to context processor将装饰器应用于上下文处理器
【发布时间】:2012-04-11 12:09:27
【问题描述】:

我正在将 Fandjango 用于 Django Facebook Canvas 应用程序。

要使用 fandjango,您需要使用 @facebook_authorization_required 包装所有视图函数,以确保您已获得授权,然后为您提供变量 request.facebook.user

我想要的是创建一个上下文处理器,它基于此定义更多变量,即我希望我的所有模板都能够使用fb_user 作为@987654324 的快捷方式@。

问题是,我不知道如何在上下文处理器上使用装饰器。

有什么想法可以做到这一点吗?

【问题讨论】:

  • 可以fb_user = request.facebook.user 帮忙吗?
  • 是的,我可以将它添加到所有视图中,我只是还有一些作业,我不想在每个视图中都重复它们。
  • 我的意思是,正如 Daniel 的回答,为什么不直接在 context_processor 中写入 fb_user = request.facebook.user,当然还要进行一些条件检查。
  • 上下文处理器在 RequestContext() 中调用,它通常驻留在您的视图中,因此实际上它是由装饰器包装

标签: python django facebook fandjango


【解决方案1】:

无需包装上下文处理器。如果您首先包装了视图,那么request 将已经被facebook.user 属性注释。由于无论如何都会将请求传递给上下文处理器,因此您可以访问该属性。

您可能应该在上下文处理器中进行快速检查 - if hasattr(request, 'facebook'),以确保它是从包装视图中调用的。

【讨论】:

  • 嗯。这就是我最初所做的,只是它没有工作。我会重新检查,也许我犯了其他错误。
  • 好吧,我重新检查了它,它似乎正在工作。回想起来,它在我的早期测试中确实有效,然后停止工作。现在我不确定我添加的是否有问题或到底发生了什么。一种可能性 - 也许我在不知不觉中调用了请求中没有“facebook”的 ajax 函数,这会导致错误。我将尝试使用 hasattr 检查代码,看看它是否会返回。
  • OK 好像我理解了这个问题:如果 Fandjango 需要重新检查 facebook 以获取用户(我假设某种身份验证或缓存刷新),第一次加载视图时它确实 没有有 Facebook 用户。注意:我必须做if hasattr(request.facebook, 'user'),而不是你在答案中写的。
猜你喜欢
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2021-08-24
  • 2019-05-09
  • 2011-05-06
  • 1970-01-01
相关资源
最近更新 更多