Аутентификация django с использованием auth.views - PullRequest
2 голосов
/ 02 июня 2009

Пользователь должен быть перенаправлен на страницу входа после регистрации и после выхода из системы. В обоих случаях должно отображаться сообщение с указанием соответствующих сообщений.

Использование django.contrib.auth.views.login как мне отправить эти {{info}} сообщения.

Возможный вариант - скопировать auth.views в новый модуль регистрации и включить все необходимые материалы. Но это не кажется достаточно сухим.

Какой самый лучший подход.

Обновление: уточнение вопроса:

Для обычных случаев, когда вы хотите указать какому-либо пользователю реакцию на действие, которое вы можете использовать

request.user.message_set.create()

Это создает сообщение, которое отображается в одном из шаблонов и автоматически удаляется.

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

Добавьте к этому, встроенные функции login и logout из django.contrib.auth.views возвращают 'HttpResponseRedirect', который делает невозможным добавление другой переменной в шаблон.

Я попытался установить вещи для самого объекта запроса

request.info='Registered'

и отметьте это в другом представлении

try:
   info = request.info:
   del request.info
except:
   info = ''

#later
render_to_response('app/file',{'info':info})

Даже это не сработало.

Очевидно, что я могу определить зарегистрированный.html и добавить туда это статическое сообщение, но мне было лень писать другой шаблон и пытаться реализовать его СУХОЙ.

Я понял, что случаи были разными для "зарегистрированного" сообщения и сообщения "вышел из системы". И СУХОЙ подход, который я использовал, я напишу как ответ.

Ответы [ 3 ]

3 голосов
/ 02 июня 2009

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

(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'myapp/login.html'}

Из документов .

1 голос
/ 03 июня 2009

Я думаю, что лучшим решением этой проблемы является использование системы обмена сообщениями на основе сеансов типа «флэш». Есть несколько вариантов: django-flash кажется действительно хорошим, я использую django-session-messages , что очень просто. Надеемся, что к тому времени, когда мы доберемся до Django 1.2, он уже будет готов.

0 голосов
/ 02 июня 2009

У вас есть обработчики контекста запросов для добавления такого рода информации в контекст каждого отображаемого шаблона.

Это способ "нулевого воздействия" для такого рода вещей. Вы не обновляете никакие функции просмотра, поэтому он соответствует некоторым определениям DRY.

См. http://docs.djangoproject.com/en/dev/ref/templates/api/#id1

Сначала напишите свой собственный шаблон login.html.

Во-вторых, напишите свою собственную контекстную функцию, чтобы предоставить любую дополнительную информацию, которая должна быть вставлена ​​в шаблон.

В-третьих, обновите настройки, чтобы добавить ваш контекстный процессор к настройке TEMPLATE_CONTEXT_PROCESSORS.

...