Как сделать форму входа доступной для всего сайта на Django - PullRequest
3 голосов
/ 22 февраля 2012

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

Ответы [ 3 ]

5 голосов
/ 22 февраля 2012

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

{% login_form %}

Возможно, вы захотите передать этот тег request.get_absolute_uri, чтобы он мог использоватьв параметре ?next={{ request.get_absolute_uri }} для вида входа в систему, чтобы пользователь мог быть перенаправлен на текущую страницу после входа в систему.

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

{% if not user.is_authenticated %}
  {% login_form %}
{% else %}
  {# display welcome message. #}
{% endif %}
2 голосов
/ 22 февраля 2012

Несколько разных способов сделать это:

  1. Измените свой базовый шаблон и жестко закодируйте форму (это только несколько поля - не забудьте токен CSRF).
  2. Использование контекстного процессора для создания переменной формы Django доступно для каждого шаблона.
  3. Создание пользовательского тега шаблона для отображения формы и использовать его на свой базовый шаблон.

Скорее всего, вы захотите заключить логику в шаблон следующим образом:

{% if user.is_authenticated %}
   <!-- maybe show a logout link -->
{% else %}
   <!-- display your form using one of the methods above -->
{% endif %}

Примечание: если вы используете обработчик контекста шаблона аутентификации , переменная пользователя будет доступна во всех ваших шаблонах.

1 голос
/ 22 февраля 2012

Я встроил свою форму входа в базовый шаблон и передал request.user вместе с шаблонами моего сайта, чтобы отобразить форму входа только в том случае, если пользователь еще не вошел в систему.

Так что, на мой взгляд, я включаю 'user': request.user, и мой шаблон выглядит примерно так:

{% if not user.is_authenticated %}
<form><fieldset><!-- Your login form here --></fieldset></form>
{% else %}
<!-- If you want to display something else if the user is logged in, like -->
<p>Welcome, {{ user }}!</p>
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...