Django - 限制url访问超级用户

时间:2010-06-29 09:11:00

标签: django django-urls currying django-permissions

在我的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)),

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

我正在考虑通过functools.partial来修饰装饰器,但我想我可能会错过一些更明显的解决方案。

3 个答案:

答案 0 :(得分:4)

很晚回复!...

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

使用user_passes_test装饰器。

示例:

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)

def sample_view(request):