Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2009 17:53:37

e4key
От:
Зарегистрирован: 2009-07-25
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Проектирование приложения

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

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

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

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

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



Офлайн

#2 Ноя. 24, 2009 20:56:17

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Проектирование приложения

Вы всё делаете не так.

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

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

Офлайн

#3 Ноя. 25, 2009 13:47:17

e4key
От:
Зарегистрирован: 2009-07-25
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Проектирование приложения

Спасибо.

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



Отредактировано (Ноя. 25, 2009 13:59:30)

Офлайн

#4 Ноя. 25, 2009 14:11:16

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Проектирование приложения

Думаю, будет правильно вынести саму логин-форму в отдельный html-файл, оформить в главном шаблоне это в виде блока и включить. Типа так:

...
{% block login_block %}
{% include "путь к шаблону с этим блоком"%}
{% endblock %}
...



Офлайн

#5 Ноя. 25, 2009 14:19:28

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Проектирование приложения

Да, лучше вынести отдельно.

Офлайн

#6 Ноя. 28, 2009 11:31:26

e4key
От:
Зарегистрирован: 2009-07-25
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Проектирование приложения

Спасибо, разобрался.

Вот только маленькая проблема с той же аутентификацией. Сделал в базовом шаблоне следующее:

{% 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/ показывает нормально, что залогинен. В чем может быть проблема? Спасибо.



Отредактировано (Ноя. 28, 2009 11:34:02)

Офлайн

#7 Ноя. 28, 2009 15:15:07

e4key
От:
Зарегистрирован: 2009-07-25
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Проектирование приложения

может надо что-то передавать в шаблон, чтобы определяло сессию? я создал простое представление, где сразу идет возвращение render_to_response.



Офлайн

#8 Ноя. 28, 2009 15:21:34

e4key
От:
Зарегистрирован: 2009-07-25
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Проектирование приложения

И правда :) добавил context_instance=RequestContext(request) в render_to_response. Если я вставил проверку аутентификации в базовый шаблон, то нужно постоянно передавать RequestContext в шаблон? Или есть более правильные пути?



Отредактировано (Ноя. 28, 2009 15:22:02)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version