Найти - Пользователи
Полная версия: две формы авторизации на одной странице
Начало » Django » две формы авторизации на одной странице
1 2 3
Nick2009
Ferroman
Ага. Так передавать тогда hidden поле с идентификатором формы, и не парится.
Правда лучше таки на разные вьюхи разбить а не городить кучу…
Тогда придется свои обработчики для каждого шаблона делать вместо стандартного login.
Nick2009
Ferroman
По каким урлам, и где это “автоматом”? Сами же сказали - action'ы одинаковые
Для чайников вроде меня Джанга предоставляет такой сервис.
Александр Кошелев
Nick2009
Мы наверное разными джангами пользуемся.
Да Джанга то как раз одна. Мы вот все тут разные.
Nick2009
Я пока пользуюсь дефолтным функционалом и всё у меня работает, я даже эту хрень заставлю работать.
Похвально.
Nick2009
Просто хотел обсудить насколько это плохо.
Очень.
Nick2009
Вьюха, получается, одна и это login , а темплейтов много.
Вьюха логин, как следует и её названия - логинит пользователя. Про регистрацию она ничего не знает. Это хорошо.
Nick2009
Как обработчик login прикрутить к logout с текстом?
Тоже хорошо. Есть логаут, который делает что должен и про регистрацию тоже ничего не знает.
Nick2009
Как обработчик login прикрутить к logout с текстом?
Обработчик никуда прикручивать не надо. Для логина, как мы поняли, есть своя вьюха.
Nick2009
Как login прикрутить к register, если у него совсем другой функционал.
Аналогично - ничего не надо никуда прикручивать.
Nick2009
ТЗ потомучто! Все страницы имеют форму login-а, а по дефолту урл должен выглядеть так
У вас в ТЗ прописано, что все эти три джанговские вьюхи должны уметь делать дела друг друга? Нет. Так зачем вы пытаетесь их это заставить?

Теперь немного форумной магии - следите за руками.

Предположим, что вы дали каждому из урлов правильное имя (login, logout, register), и что вот это как раз и есть многострадальный шаблон для вьюхи регистрации:
{% if not user.is_authenticated %}
<form action="{% url login %}?next={% url registration %}" method="POST">
<!-- Тут поля для логина -->
</form>
{% else %}
<form action="{% url logout %}?next={% url registration %}" method="POST">
</form>
{% endif %}

<form action="{% url registration %}" method="POST">
<!-- Тут поля для регистрации -->
</form>
Видите? И совсем не больно. Итого у вас остались три независимые вьюхи и при этом вы удовлетворили своё стремление следовать ТЗ.
Nick2009
Daevaorn
Предположим, что вы дали каждому из урлов правильное имя (login, logout, register), и что вот это как раз и есть многострадальный шаблон для вьюхи регистрации:
Код:

{% if not user.is_authenticated %}
<form action=“{% url login %}?next={% url registration %}” method=“POST”>
<!– Тут поля для логина –>
</form>
{% else %}
<form action=“{% url logout %}?next={% url registration %}” method=“POST”>
</form>
{% endif %}

<form action=“{% url registration %}” method=“POST”>
<!– Тут поля для регистрации –>
</form>

Видите? И совсем не больно. Итого у вас остались три независимые вьюхи и при этом вы удовлетворили своё стремление следовать ТЗ.
Это всё так конечно, но…
1) Забыли попрощаться после logout
2) Почему для login следующая страница - registration, а не profile?
3) Есть еще несколько страниц, которым нужна форма логина.
Ferroman
1. Я не телепат.
2. Документация Django начинается с “Overview” а не с “Введения”
3. Я думаю, такой внимательный человек сам разберётся без нашей помощи.
Nick2009
Ferroman
1. Я не телепат.
2. Документация Django начинается с “Overview” а не с “Введения”
3. Я думаю, такой внимательный человек сам разберётся без нашей помощи.
Извиняюсь, я исправил.
Александр Кошелев
Nick2009
Nick2009
Почему для login следующая страница - registration, а не profile?
Тут логика такая - надо вернуться на ту страницу, где пользователь воспользовался виджетом логина. В данном случае это страница регистрации, а в общем “текущая страница”. Но это всё на усмотрение автора.

Вы суть уловили?
Nick2009
Daevaorn
Nick2009
Nick2009
Почему для login следующая страница - registration, а не profile?
Тут логика такая - надо вернуться на ту страницу, где пользователь воспользовался виджетом логина. В данном случае это страница регистрации, а в общем “текущая страница”. Но это всё на усмотрение автора.

Вы суть уловили?
В целом, да, а так, нет. Текущая страница это ‘.’, поэтому я и говорил, что action одинаковый.
После логина нужно на profile, а не на текущую. Дефолтный логин сам туда направляется, ничего указывать не нужно.
Nick2009
В частности, для решения проблемы с logout мне нужно передать новый параметр, чтобы его отловить в шаблоне.
Как это сделать или какой из параметров logout можно задействовать?

Требуется примерно следующее
(r'^accounts/logout/$',logout,{'template_name':'index.html','after_logout':'yes'}),
Затем в index.html

{% if after_logout%} Вы успешно вышли! {endif}

И всё равно это будет не то, что нужно, т.к. от того, что я вызываю index.html (с формой логина), он не будет работать также как если бы он был вызван из login.

Т.е. нужно сказать logout, чтобы вместо шаблона “после выхода”, был вызван login с дефолтным шаблоном и в этот дефолтный шаблон был передан параметр, который определен только для logout.
Александр Кошелев
Nick2009
Текущая страница это ‘.’, поэтому я и говорил, что action одинаковый.
Нет. Action как раз разный - в этом суть. И ‘.’ бессмысленно передавать как next.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB