2016-08-30 4 views
2

так в моем urls.py (за пределами Джанго администратора по умолчанию раздел) я хочу, чтобы ограничить некоторые URLs только администратору, так что если у меня есть это для зарегистрированных пользователейсоздание администратора ограничено URLs

from django.contrib.auth.decorators import login_required 

    urlpatterns = [ 
     url(r'^a1$',login_required(views.admin_area1), name='a1'), 
     url(r'^a2$', login_required(views.admin_area2) , name='a2'), 
     url(r'^a3', login_required(views.admin_area3) , name='a3'), 
    ] 

есть enyway torestrict этих ссылок для зарегистрированных администраторов не только любой зарегистрированный пользователь? есть, но according to this я могу использовать user_passes_test, но я должен использовать его в целях

+1

user_passes_test - лучший способ. Кстати, не против меня говорить, если вы хотите быть хорошим кодером, разработайте практику чтения документов вместо SO. –

+0

@SwakeertJain проблема с 'user_passes_test' заключается в том, что я должен использовать его в представлениях, которые мне не нравятся, спасибо за совет, который я читаю docs, но иногда вы хотите быстро получить результат, а документы огромны с хорошими примерами – max

ответ

7

Вы можете использовать декоратор, возвращенное user_passes_test(lambda u: u.is_superuser) таким же образом, что вы используете login_required:

urlpatterns = [ 
    url(r'^a1$', user_passes_test(lambda u: u.is_superuser)(views.admin_area1), name='a1'), 
] 

Если вы хотите ограничить доступ к администраторам, то может быть более точным использовать декоратор staff_member_required (который проверяет флаг is_staff) вместо проверки флага is_superuser.

from django.contrib.admin.views.decorators import staff_member_required 

urlpatterns = [ 
    url(r'^a1$', staff_member_required(views.admin_area1), name='a1'), 
    ... 
] 
+0

thanx, я не хочу использовать django admin, и я пишу свой собственный администратор, поэтому я думаю, 'staff_member_required' - это то, что я хочу – max