Создание приложения
Давайте начнем работать над нашим первым Django-приложением. Мы будем создавать блог с нуля. Выполните следующую команду из корневого каталога проекта:
python manage.py startapp blog
Давайте рассмотрим назначение этих модулей:
admin.py – здесь мы регистрируем модели для добавления их в систему администрирования Django (использование сайта администрирования не является обязательным);
apps.py – файл, содержащий основную конфигурацию приложения blog;
migrations – папка, содержащая миграции базы данных приложения, чтобы фиксировать изменения и заносить их в базу данных.
models.py – модели данных приложения;
tests.py – этот файл предназначен для создания тестов для приложения;
views.py – вся логика приложения описывается здесь. Каждый обработчик получает HTTP-запрос, обрабатывает его и возвращает ответ.
Проектирование схемы Данных
Модель – это Python-класс, который является наследником django.db.models.Model. Каждый атрибут представляет собой поле в базе данных. Django создает таблицу в базе данных для каждой модели, определенной в models.py.
Определим модель для хранения наших статей нашего блога: Post.
Для создания модели данных добавим следующий код в models.py приложения blog.
В Django определены различные типы полей, которые мы можем использовать для создания моделей. Полное их описание можно найти на сайте https://docs.djangoproject.com/en/2.0/ref/models/fields/.
Класс Meta внутри модели содержит метаданные. Мы указали Django порядок сортировки статей по умолчанию – по убыванию даты публикации, поля publish. О том, что порядок убывающий, говорит префикс «-». Таким образом,только что опубликованные статьи будут первыми в списке.
Метод __str__() возвращает отображение объекта, понятное человеку. Django использует его, например на сайте администрирования.
Настройка приложения
Для того чтобы Django начал отслеживать наше приложение и создал таблицы в базе данных для моделей, необходимо активировать его. Для этого отредактируйте settings.py и добавьте blog.apps.BlogConfig в настройку INSTALLED_APPS. Должно получиться так:
BlogConfig – это конфигурация приложения. Теперь Django знает, что для этого проекта приложение блога активно, и сможет загрузить его модели.
Миграции с базой данных
Не забываем, что внесенные изменения всегда нужно явно указывать при разработке приложений, для этого нужно создать для модели таблицу в базе данных. Команда migrate применяет все миграции для всех приложений из списка INSTALLED_APPS. Она изменяет базу данных с учетом текущих моделей и созданных миграций.
Для начала необходимо создать инициализирующую миграцию для модели Post. В корневом каталоге проекта выполните следующую команду:
Django создал файл 0001_initial.py в папке migrations. Вы можете открыть его, чтобы посмотреть, как выглядит файл миграции. Объект миграции определяет зависимости с другими миграциями и операции, которые необходимо выполнить для синхронизации базы данных.
Давайте посмотрим на SQL-код, который будет выполнен в базе данных для создания таблицы модели. Команда sqlmigrate получает на входе имя миграции и возвращает ее SQL-код, не выполняя его. Следующая команда выведет в консоль SQL нашей первой миграции:
python manage.py sqlmigrate blog 0001
По умолчанию первичным ключом является колонка id, которая заполняется целыми числами с автоинкрементом. Эта колонка соответствует полю id, которое добавляется автоматически для всех моделей.
Синхронизируем базу данных. Применения миграций:
Мы применили миграцию для всех приложений, указанных в INSTALLED_APPS, включая blog. После применения миграций база данных соответствует текущему состоянию моделей.
Каждый раз, когда мы будем редактировать models.py, добавляя, удаляя или изменяя поля существующих моделей или добавляя новые модели, мы будем создавать новую миграцию с помощью команды makemigrations. Так Django сможет отслеживать изменения в моделях. После создания миграций нужно применять их командой migrate для синхронизации базы данных.
Администрирование
Для управления сайтом администрирования необходим аккаунт суперпользователя создадим его с помощью терминальной команды: python manage.py createsuperuser
Вы увидите запрос на ввод логина, электронной почты и пароля для нового пользователя:
Username (leave blank to use 'admin'): admin Email address: admin@admin.com
Password: ********
Password (again): ********
Superuser created successfully.
После создания суперпользователя запускаем наш сервер: python manage.py runserver
Перейдите в раздел admin/ на вашем сервере и авторизуйтесь по указанным данным: http://127.0.0.1:8000/admin/
Модели Group и User – часть подсистемы аутентификации Django.Они находятся в приложении django.contrib.auth. Если вы кликните на Users, то увидите всех пользователей, созданных на текущий момент. Созданная модель Post приложения blog связана с моделью User через поле author.
Добавим модели блога на сайт администрирования. Отредактируйте admin.py в приложении blog таким образом:
from django.contrib import admin
from .models import Post
# Register your models here.
admin.site.register(Post)
Теперь перезагрузите страницу в браузере, и вы увидите, что модель Post добавлена на сайт администрирования.
Регистрируя модель на сайте администрирования Django, мы получаем удобный интерфейс для просмотра, редактирования, создания и удаления объектов.
Кликните на ссылку Add напротив пункта Posts для создания новой статьи.
Настройка отображения моделей
Теперь давайте настроим отображение сайта администрирования. Отредактируйте файл admin.py приложения блога и добавьте следующий фрагмент:
Так мы говорим Django, что наша модель зарегистрирована на сайте администрирования с помощью пользовательского класса, наследника ModelAdmin. В нем мы указали, как отображать модель на сайте и как взаимодействовать с ней. Атрибут list_display позволяет перечислить поля модели, которые мы хотим отображать на странице списка. Декоратор @admin.register() выполняет те же действия, что и функция admin.site.register(): регистрирует декорируемый класс – наследник ModelAdmin.