419
Рис. 19.3.
Каждая запись снабжается ссылкой для редактирования этой записи
регистрации пользователей, чтобы любой желающий мог создать свою учетную
запись в Learning Log и ввести собственный набор тем и записей.
УПРАЖНЕНИЯ
19-1 . Блог: создайте новый проект Django с именем Blog . Создайте в проекте приложе-
ние с именем blogs и моделью BlogPost . Модель должна содержать такие поля, как title,
text и date_added . Создайте суперпользователя для проекта и воспользуйтесь администра-
тивным сайтом для создания пары коротких сообщений . Создайте домашнюю страницу,
на которой выводятся все сообщения в хронологическом порядке .
Создайте одну форму для создания новых сообщений и другую форму для редактирования
существующих сообщений . Заполните формы и убедитесь в том, что они работают .
Создание учетных записей пользователей
В этом разделе мы создадим систему регистрации и авторизации пользователей,
чтобы люди могли создать учетную запись, начать и завершать сеанс работы с при-
ложением. Для всей функциональности, относящейся к работе с пользователями,
будет создано отдельное приложение. Мы также слегка изменим модель
Topic
,
чтобы каждая тема была связана с конкретным пользователем.
Приложение users
Начнем с создания нового приложения
users
командой
startapp
:
(ll_env)learning_log$
python manage.py startapp users
(ll_env)learning_log$
ls
420
Глава 19 • Учетные записи пользователей
db.sqlite3 learning_log learning_logs ll_env manage.py users
(ll_env)learning_log$
ls users
admin.py __init__.py migrations models.py tests.py views.py
Эта команда создает новый каталог с именем
users
, структура которого повторяет
структуру каталогов приложения
learning_logs
.
Добавление пользователей в settings .py
Новое приложение необходимо добавить в
settings .py
:
settings.py
...
INSTALLED_APPS = (
...
# My apps
'learning_logs',
'users',
)
...
Django включает приложение
users
в общий проект.
Включение URL-адресов из users
Затем необходимо изменить корневой файл
urls .py
, чтобы он включал URL-адреса,
написанные для приложения
users
:
urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^users/', include('users.urls', namespace='users')),
url(r'', include('learning_logs.urls', namespace='learning_logs')),
]
Добавим строку для включения файла
urls .py
из
users
. Эта строка будет соответ-
ствовать любому URL-адресу, начинающемуся со слова
users
, — например,
http://
localhost:8000/users/login/
. Также будет создано пространство имен
'users'
, чтобы
мы могли отличать URL-адреса, принадлежащие приложению
learning_logs
,
от URL, принадлежащих приложению
users
.
Страница входа
Начнем с реализации страницы входа. Мы воспользуемся стандартным представле-
нием
login
, которое предоставляет Django, так что шаблон URL выглядит немного
иначе. Создайте новый файл
urls .py
в каталоге
learning_log/users/
и добавьте в него
следующий код:
urls.py
"""Определяет схемы URL для пользователей"""
Создание учетных записей пользователей
421
from django.conf.urls import url
from django.contrib.auth.views import login
from . import views
urlpatterns = [
# Страница входа
url(r'^login/$', login, {'template_name': 'users/login.html'},
name='login'),
]
Сначала импортируется представление
login
по умолчанию
. Схема страницы
входа соответствует URL
http://localhost:8000/users/login/
. Когда Django чита-
ет этот URL-адрес, слово
users
указывает, что следует обратиться к
users/urls .py
,
а
login
сообщает о том, что запросы должны отправляться представлению
login
по умолчанию (обратите внимание: в аргументе представления используется
login
,
а не
views.login
). Так как мы не пишем собственную функцию представления,
мы передаем словарь, который сообщает Django, где искать шаблон (сейчас мы
его напишем). Этот шаблон будет частью приложения
users
, а не приложения
learning_logs
.
Шаблон login
Когда пользователь запрашивает страницу входа, Django использует свое пред-
ставление
login
по умолчанию, но мы все равно должны предоставить шаблон
для этой страницы. В каталоге
learning_log/users/
создайте каталог с именем
templates
, а внутри него — еще один каталог с именем
users
. Вот как выглядит
шаблон
login .html
, который должен находиться в
learning_log/users/templates/
users/
:
login.html
{% extends "learning_logs/base.html" %}
{% block content %}
{% if form.errors %}
Your username and password didn't match. Please try again.
{% endif %}
{% endblock content %}
Шаблон расширяет
base .html
, чтобы страница входа по оформлению и поведению
была похожа на другие страницы сайта. Обратите внимание: шаблон в одном при-
ложении может расширять шаблон из другого приложения.
422
Достарыңызбен бөлісу: |