Django - декораторы и сообщения об ошибках - PullRequest
2 голосов
/ 26 января 2011

Это кажется простым вопросом, но я не могу найти простой ответ.Django, кажется, предоставляет этот изящный простой способ ограничения доступа к местам с использованием необходимых разрешений или декораторов, требующих входа в систему, но я не могу видеть из документов Django, как можно было бы передать сообщение об ошибке (возможно, используя платформу сообщений).Если мне для этого нужен собственный декоратор, какой смысл декораторам django?Они просто не показывают никаких сообщений об ошибках?

Ответы [ 3 ]

2 голосов
/ 26 января 2011

Я думаю, вы связываете безопасность и разрешения с системой аутентификации Django.По большей части инструменты Django в основном предназначены для разделения пользователей на две группы: аутентифицированные (вошедшие в систему) и анонимные.Это имеет смысл для 90% веб-сайтов, так как на самом деле вам не нужно слишком много различий (возможно, другое для скрытого администратора, но это крайний случай, а не норма).

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

В этом случае так просто свернуть свой собственный декоратор, используя сообщения для конкретных ошибок.Один из таких примеров:

def user_has_permissions(method):
    return user_passes_test(lambda u: u.has_perm('my_permission'), login_url='/permission-denied/')(method)
0 голосов
/ 26 января 2011

Полагаю, вы просто избегали читать это

http://docs.djangoproject.com/en/1.2/topics/auth/#the-login-required-decorator

login_required () выполняет следующие действия:

Если пользователь не вошел в систему, перенаправить до settings.LOGIN_URL, передавая текущий абсолютный путь в запросе строка. Пример: /accounts/login/?next=/polls/3/.

Если пользователь вошел в систему, выполните смотреть нормально. Код просмотра бесплатный предположить, что пользователь вошел в систему.

Нет "сообщений об ошибках". Сообщения об ошибках грубы. И в основном бесполезно. Они часто являются признаком плохого дизайна.

Как правило, вам не нужно миллион крошечных объяснений. Действительно, страница входа по умолчанию работает нормально для 80% случаев использования. Если вам нужно прояснить ситуацию, вы можете предоставить собственную HTML-форму. Вы можете использовать обычный шаблонный контекст для добавления дополнительной информации. У вас есть Структура сообщений для представления дополнительных сообщений на странице входа.

0 голосов
/ 26 января 2011

Вы отправите пользователю автоматическое сообщение об ошибке .. Вам нужно посмотреть, как перегрузить ..

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