Сообщение об ошибке Django allow_required? - PullRequest
6 голосов
/ 10 августа 2010

Я добавил этот декоратор к одному из моих просмотров

@permission_required('codename')

Когда пользователь заходит на эту страницу и не имеет необходимых разрешений, он перенаправляется на страницу входа, но на самом деле он не сообщает ему , почему он был перенаправлен туда. Хуже того, если он войдет в систему, а по-прежнему не имеет разрешений, он будет совершенно не в курсе, почему он не может получить доступ к этой странице!

Разве я не могу подключиться к структуре сообщений и одновременно опубликовать сообщение об ошибке?

Ответы [ 4 ]

3 голосов
/ 01 августа 2013

Не уверен, какую версию Django вы используете, но в Django 1.4 и выше вы можете использовать:

from django.contrib.auth.decorators import permission_required

@permission_required('app.permission',raise_exception=True)
def myView(request):
    #your view code

Это вызовет исключение 403, и если у вас есть страница 403.html в базеиз вашей папки шаблонов это будет сервер.

Если вы используете представления на основе классов:

from django.views.generic.base import View
from django.contrib.auth.decorators import permission_required
from django.utils.decorators import method_decorator

class MyView(View):

    @method_decorator(permission_required('app.permission',raise_exception=True)
    def get(self, request):
        #your GET view

Надеюсь, это поможет.

2 голосов
/ 10 августа 2010

Использование @permission_required_or_403('codename')

Это перенаправит пользователей на страницу ошибки 403 «Отказано в доступе».

1 голос
/ 10 августа 2010

Вы можете подключиться к структуре сообщений и предоставить сообщение об ошибке. См. мой ответ на идентичный вопрос.

1 голос
/ 10 августа 2010

Вы можете использовать параметр login_url в этом декораторе для перенаправления на другую страницу, а не на страницу входа.Или вы можете просто написать свой собственный декоратор на основе кода из django:

def permission_required(perm, login_url=None):
    """
    Decorator for views that checks whether a user has a particular permission
    enabled, redirecting to the log-in page if necessary.
    """
    return user_passes_test(lambda u: u.has_perm(perm), login_url=login_url)

Просто измените login_url на redirect_to, и это не вызовет путаницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...