django-registration, django.contrib.auth логин и пользователь "активен" флаг - PullRequest
4 голосов
/ 09 мая 2011

Я использую Django 1.1. документы
http://docs.djangoproject.com/en/1.1/topics/auth/#topics-auth
на флаге is_active написано

Это не контролирует, пользователь может войти в систему. Ничего в путь аутентификации проверяет Флаг is_active, так что если вы хотите отклонить вход на основании is_active будучи ложным, это зависит от вас, чтобы проверить это в вашем собственном представлении входа в систему. Тем не мение, проверка разрешений с использованием методов как has_perm () проверяет этот флаг и всегда вернет False для неактивные пользователи.

Я использую django-регистрацию (последняя версия 0.8 alpha) и использую все бэкэнды по умолчанию. Вся предпосылка django-регистрации основана на флаге is_active. то есть он устанавливается только после активации пользователя. Тем не менее, я вижу, что когда пользователь входит в систему, он использует django.contrib.auth.views.login. Я могу видеть это из кода в auth_urls.py.

Когда пользователь регистрируется, но еще не активирован, я хочу, чтобы отображалось сообщение с текстом «Вы не активировали свою учетную запись»

В настоящее время поведение по умолчанию - это сообщение об ошибке формы: «имя пользователя и пароль не совпадают»

Я также использую декоратор входа в свои представления

@login_required

Мои вопросы:

РЕДАКТИРОВАТЬ: Спасибо Джеймс и Генри. Я не думаю, что я был очень хорош в описании моих вопросов. Я переделал это.

  1. Документация django говорит, что is_active не используется в качестве детерминанта при входе пользователя в систему. Это вполне ясно НЕ случай. Попробуй сам. Я не могу понять, где это происходит в коде. Кто-нибудь знает? Насколько я вижу, это не происходит ни в django-регистрации, ни в django.contrib.auth.
  2. Чтобы отобразить сообщение об ошибке, которое я описал выше, как мне лучше всего это сделать? Пожалуйста, имейте в виду, что я использую django-регистрацию, поэтому большая часть сантехники уже сделана. Я бы не хотел изменять это или переписывать все. если возможно, я ищу .... "элегантное" решение.

Заранее спасибо

относительно Q1,

Ответы [ 2 ]

5 голосов
/ 10 мая 2011

Спасибо всем, кто задумался над этим вопросом.В конце я заметил некоторый html-код в шаблоне по умолчанию, который раньше не замечал.

{% if form.errors %}
<div class="error">
<p>Your username and password didn't match. Please try again.</p>
</div>
{% endif %}

Почувствовал себя немного глупо, увидев это.Я скопировал код из другого проекта и просто предположил, что ошибки генерируются динамически, а не жестко закодированы.

, поэтому я начал расследование

forms.errors 

и обнаружил

forms.non_field_errors

и пытаясь выяснить, как оформить вывод (потому что по умолчанию глупая вещь выводит его в тегах html ul), нашел это:

Ошибки формы вывода Django в виде строк таблицы в {{form.as_table}}

Спасибо, Чэндс (поскольку ответ стал очевиден из его вопроса)

Один комментарий.Документация на это (по крайней мере для 1.1) ужасна .Почему это не является более явным в официальных документах Django, мне не понятно.кажется довольно простой вещью, которую хочется сделать.

0 голосов
/ 09 мая 2011

Я думаю, что проблема в django-регистрации.

См. Информацию в строке 132 из https://bitbucket.org/ubernostrum/django-registration/src/tip/docs/quickstart.rst

В нем говорится, что он не позволит неактивным пользователям войти в систему.

UPDATE

Вы можете написать свой собственный бэкэнд или использовать простой бэкэнд и добавить новое свойство в модель своего профиля под названием activated. Это было бы изрядное количество работы.

Что касается того, где это, я предполагаю, что это в django.contrib.auth.views.login. Не тратя много времени на его просмотр, я думаю, вы могли бы довольно легко скопировать его и сделать свой собственный. (если это действительно проблема)

Затем вам потребуется заменить его в файле auth_urls.py для URL-адреса входа.

EDIT

Я только что перешел к документации 1.2, чтобы проверить различия

http://docs.djangoproject.com/en/1.2/topics/auth/#django.contrib.auth.models.User.is_active Вы увидите, что там написано, что форма проверяет это. Так что это всегда было так, но оно не было должным образом описано, или вы обновили до 1.2 и забыли / не знаете.

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