Найти - Пользователи
Полная версия: Проектирование приложения
Начало » Django » Проектирование приложения
1
e4key
Привет всем. Прошу помочь мне в проектировании. Я совсем недавно начал изучать джангу, изучил все основы, но столкнулся с проблемой при разработке реального приложения. Есть базовый шаблон. Нужно, чтобы на всех страницах отображался блок:
1. В случае, если пользователь не зашел: форма входа;
2. В случае, если пользователь зашел: приветствие пользователя.

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

В принципе с аутентификацией разобрался, но не получается именно с шаблонами. Сейчас я создал приложение account (в будущем у пользователя будет большой профиль), в котором есть предстваление userlogin. Сделал проверку есть ли в POST переменные username и password. Если есть, то делаю логин, а если нет, то показываю форму.

А как лучше сделать, чтобы на странице всегда показывался блок (о котором писал в начале).

Меня не покидает ощещение, что я все делаю не так =/ Кому не сложно, приведите простую схемку шаблонов и представлений для данной задачи. Спасибо.
Ferroman
Вы всё делаете не так.

Блок рисуется очень просто - проверкой в шаблоне user.is_authenticated. По ссылке пример - если залогиненый - показываете приветствие, иначе - форму.
Приложение c своими логин-контролами делать не обязательно - есть build-in views для аутентификации.

Почитайте в джангобуке - там, вроде бы нормально рассказано что к чему.
e4key
Спасибо.

А как будет правильней запихнуть весь этот блок в базовый шаблон или как то по другому?
Просто планируется еще там выводить дополнительную информацию, например количество новостей, которые принадлежат этому пользователю.
regall
Думаю, будет правильно вынести саму логин-форму в отдельный html-файл, оформить в главном шаблоне это в виде блока и включить. Типа так:
...
{% block login_block %}
{% include "путь к шаблону с этим блоком"%}
{% endblock %}
...
Ferroman
Да, лучше вынести отдельно.
e4key
Спасибо, разобрался.

Вот только маленькая проблема с той же аутентификацией. Сделал в базовом шаблоне следующее:
{% if user.is_authenticated %}
<p>Привет, {{ user.username }}. <a href="{% url account-logout %}">Выйти</a>?</p>
{% else %}
<p>Вы не вошли. Пожалуйста, <a href="{% url account-login %}">войдите</a>.</p>
{% endif %}
Сделал формочку для логина на стандартном представлении, сделал выход пользователя. Вот что в urls приложения (в главном стоит инклуд):
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')
)
Создал представление home, сделал там простой render_to_response + установил декоратор login_required. Но почему на этой странице (/account/) тот самый кусок из базового шаблона показывает, что я не залогинен (хотя login_required пропускает) + на странице /account/login/ показывает нормально, что залогинен. В чем может быть проблема? Спасибо.
e4key
может надо что-то передавать в шаблон, чтобы определяло сессию? я создал простое представление, где сразу идет возвращение render_to_response.
e4key
И правда :) добавил context_instance=RequestContext(request) в render_to_response. Если я вставил проверку аутентификации в базовый шаблон, то нужно постоянно передавать RequestContext в шаблон? Или есть более правильные пути?
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