Django - ограничение доступа к URL для суперпользователей - PullRequest
1 голос
/ 29 июня 2010

В моем 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, но мне показалось, что мне не хватает более очевидного решения.

Ответы [ 3 ]

4 голосов
/ 09 сентября 2011

Очень поздний ответ! ...

Я думаю, что это просто и грязное зависание синтаксиса:

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

^ Я думаю, что это странный, но правильный синтаксис для передачи аргумента декоратору.

Но если подумать, вы можете украшать только функции просмотра, а не целые сайты.

1 голос
/ 29 июня 2010

Написать декоратор похожий на Django login_required или f.ex. этот http://djangosnippets.org/snippets/254/ и украсить вид.

0 голосов
/ 22 февраля 2011

Используйте декоратор user_passes_test.

пример:

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)

def sample_view(request):
...