Форум сайта python.su
Привет всем. Прошу помочь мне в проектировании. Я совсем недавно начал изучать джангу, изучил все основы, но столкнулся с проблемой при разработке реального приложения. Есть базовый шаблон. Нужно, чтобы на всех страницах отображался блок:
1. В случае, если пользователь не зашел: форма входа;
2. В случае, если пользователь зашел: приветствие пользователя.
Пользователь вводит имя, пароль и в случае, если все ок перенаправляется на ту же страницу, где и вводил их. Если нет, то перенаправляется на выделенну специально для входа страницу (на месте контента форма логина) и ему там печатается ошибка.
В принципе с аутентификацией разобрался, но не получается именно с шаблонами. Сейчас я создал приложение account (в будущем у пользователя будет большой профиль), в котором есть предстваление userlogin. Сделал проверку есть ли в POST переменные username и password. Если есть, то делаю логин, а если нет, то показываю форму.
А как лучше сделать, чтобы на странице всегда показывался блок (о котором писал в начале).
Меня не покидает ощещение, что я все делаю не так =/ Кому не сложно, приведите простую схемку шаблонов и представлений для данной задачи. Спасибо.
Офлайн
Вы всё делаете не так.
Блок рисуется очень просто - проверкой в шаблоне user.is_authenticated. По ссылке пример - если залогиненый - показываете приветствие, иначе - форму.
Приложение c своими логин-контролами делать не обязательно - есть build-in views для аутентификации.
Почитайте в джангобуке - там, вроде бы нормально рассказано что к чему.
Офлайн
Спасибо.
А как будет правильней запихнуть весь этот блок в базовый шаблон или как то по другому?
Просто планируется еще там выводить дополнительную информацию, например количество новостей, которые принадлежат этому пользователю.
Отредактировано (Ноя. 25, 2009 13:59:30)
Офлайн
Думаю, будет правильно вынести саму логин-форму в отдельный html-файл, оформить в главном шаблоне это в виде блока и включить. Типа так:
...
{% block login_block %}
{% include "путь к шаблону с этим блоком"%}
{% endblock %}
...
Офлайн
Да, лучше вынести отдельно.
Офлайн
Спасибо, разобрался.
Вот только маленькая проблема с той же аутентификацией. Сделал в базовом шаблоне следующее:
{% if user.is_authenticated %}
<p>Привет, {{ user.username }}. <a href="{% url account-logout %}">Выйти</a>?</p>
{% else %}
<p>Вы не вошли. Пожалуйста, <a href="{% url account-login %}">войдите</a>.</p>
{% endif %}
urlpatterns = patterns('project.account.views',
url(r'^$', 'home', name='account-home'),
)
urlpatterns += patterns('',
url(r'login/$', 'django.contrib.auth.views.login', {'template_name': 'account/login.html'}, name='account-login'),
url(r'logout/$', 'django.contrib.auth.views.logout', {'next_page': '../login'}, name='account-logout')
)
Отредактировано (Ноя. 28, 2009 11:34:02)
Офлайн
может надо что-то передавать в шаблон, чтобы определяло сессию? я создал простое представление, где сразу идет возвращение render_to_response.
Офлайн
И правда :) добавил context_instance=RequestContext(request) в render_to_response. Если я вставил проверку аутентификации в базовый шаблон, то нужно постоянно передавать RequestContext в шаблон? Или есть более правильные пути?
Отредактировано (Ноя. 28, 2009 15:22:02)
Офлайн