【问题标题】:Django - limiting url access to superusersDjango - 限制对超级用户的 url 访问
【发布时间】:2010-06-29 09:11:00
【问题描述】:

在我的 urlconf 中,我有:

url(r'^sssssh/(.*)', staff_only_app.site.root),

我想做的是将对该应用程序的任何访问权限限制为超级用户。 我试过这个:

url(r'^sssssh/(.*)', user_passes_test(staff_only_app.site.root, lambda u: u.is_superuser)),

但它抱怨 decorate 只需要 1 个参数,而我给了两个参数。

我正在考虑通过 functools.partial 对装饰器进行柯里化,但我想我可能会遗漏一些更明显的解决方案。

【问题讨论】:

  • 为什么要在urls.py中做,应该在views.py中做
  • @KillianDS 我想在 urls.py 中执行此操作,因为我不想在我没有编写的可重用应用程序中编辑所有视图。

标签: django django-urls currying django-permissions


【解决方案1】:

回复太晚了!...

我认为这只是一个快速而肮脏的语法挂断:

url(r'^sssssh/(.*)', user_passes_test(lambda u: u.is_superuser)(staff_only_app.site.root),

^我认为这是将参数传递给装饰器的奇怪但正确的语法。

但第二个想法,您只能装饰视图功能,而不是整个网站。

【讨论】:

    【解决方案2】:

    使用 user_passes_test 装饰器。

    示例:

    from django.contrib.auth.decorators import user_passes_test
    
    @user_passes_test(lambda u: u.is_superuser)
    
    def sample_view(request):
    

    【讨论】:

    • 请阅读问题及其下方的 cmets,了解为什么我希望(ed)在 url 中而不是在视图中这样做。
    【解决方案3】:

    编写一个类似于 Django 的 login_required 或 f.ex 的装饰器。这个http://djangosnippets.org/snippets/254/ 并装饰视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2012-04-28
      • 2019-07-11
      • 2019-01-06
      • 2016-04-23
      • 2012-10-23
      • 1970-01-01
      相关资源
      最近更新 更多