【问题标题】:Modifying django decorator function, Permissionn_required修改 django 装饰器函数,Permissionn_required
【发布时间】:2012-07-28 03:11:59
【问题描述】:

默认情况下,装饰器@permission_required($SOME_PERMISSION),检查请求用户是否具有请求此视图所需的权限,如果没有,则将其重定向到登录页面或任何其他指定页面。(例如,如果用户未登录,他被重定向到登录页面)。
这是我的问题,我想将未登录的用户重定向到登录页面,但可能有一个登录的用户没有所需的权限,默认情况下该用户被重定向到登录页面,而且他已经登录后,他再次被重定向到他请求的页面,这里发生了一个循环。
所以我想做的是改变这个装饰器的行为(在我的视图函数中写一个等效的代码而不是使用@permission_required)来检查用户是否因为他没有登录而看不到请求的页面,或者他是登录但没有权限,然后将他相应地重定向到正确的页面。 任何帮助将不胜感激:)
提前致谢

【问题讨论】:

标签: python django decorator


【解决方案1】:

只需将login_url 参数传递给permission_required,如:

@permission_required($SOME_PERMISSION, login_url='/my/custom/page')

【讨论】:

  • 如果您这样做,那么您应该在@permission_required 上方添加@login_required 装饰器,否则未登录的用户也会被重定向到您的自定义页面。
  • @themanatuf 谢谢!将它们一起使用可以解决问题,但有一件事,url现在看起来像:'....next=/jobs/tree/',意味着下一页的url在那里!(重定向的原因),我们不能为 url 做某事,而不是让 next=... 部分?再次感谢
  • @SpiXel - 我没有亲自做过,但我确实为你找到了这个:stackoverflow.com/questions/10950409/… 我认为中间件解决方案会为每个重定向取消“下一个”。我不确定这就是你要找的。否则自定义装饰器可能是最佳选择。同样,我还没有真正尝试过,但它应该可以工作。
【解决方案2】:

【讨论】:

  • 关于否决票的任何细节?链接的答案显示了如何创建一个自定义装饰器,这正是原始海报所要求的。
  • 今天#django 中的向下箭头似乎有点触发-高兴-无法知道是谁-忽略它:-)
猜你喜欢
  • 2015-09-13
  • 2011-09-12
  • 2018-10-25
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2020-10-09
  • 1970-01-01
相关资源
最近更新 更多