Найти в Дзене
Мысли вслух

Создание сайта в Python. Часть 3. Бэкенд. Работа с базой данных и панелью администратора на Django.

Базы данных в проектах на Django похожи на таблицы Excel, но отличие заключается в том, что тип данных для каждого столбца и их количество определяется заранее. При попытке внести в колонку данные не того типа получим ошибку и данная операция не будет выполнена.

Количество колонок, их имя и тип вносимых данных являются параметрами структуры базы данных. Изменение структуры и внесение данных в базу называется миграцией базы данных.

Работу с базой данных рассмотрим на примере проекта MySite из предыдущей статьи.

1. Миграция базы данных

Файл базы данных db.sqlite3 создаётся вместе с проектом, но в нём нет ни структуры, ни данных. Первая миграция вносит служебную информацию для добавления в будущем пользователей. Нас интересует создание суперпользователя для дальнейшей разработки сайта с помощью панели администратора.

Перейдём в папку с файлом manage.py введя "cd projectMySite" и произведём миграцию базы данных командой "python manage.py migrate" в терминале.

Миграция базы данных
Миграция базы данных

2. Создаём суперпользователя и заходим в панель администратора

Создаём суперпользователя (администратора) в терминале командой "python manage.py createsuperuser". Имя пользователя, например "admin123". Адрес электронной почты "admin123@mysite.com". Пароль: "admin123" и подтверждаем пароль, вводя его ещё раз: "admin123".

В данной статье имя и пароль суперпользователя, а также email учебные. После ввода пароля второй раз может появиться предупреждение информирующее вас о слишком простом пароле. Вы можете проигнорировать его введя "y" или ввести новый пароль введя "n".

Создание учётной записи администратора
Создание учётной записи администратора

Запустим сервер и перейдём по ссылке в терминале к странице нашего сайта, кликая на неё с нажатой клавишей Ctrl. Перейдём к панели администратора сайта, добавив "/admin" в адресную строку.

Переход в панель администратора сайта
Переход в панель администратора сайта
Форма для ввода логина и пароля администратора
Форма для ввода логина и пароля администратора

Вводим имя пользователя admin123 с паролем admin123 и переходим в панель администратора сайта.

Панель администратора сайта
Панель администратора сайта

3. Разработка сайта в панели администратора

Панель администратора сайта является интерфейсом для работы с базой данных. При первом входе мы видим только раздел базы данных пользователей сайта. Учётные записи пользователей можно объединять в группы, удалять, добавлять, изменять их параметры. Разделы базы данных и описание их полей производят в файле models.py, а сами данные вносят в базу построчно через панель администратора.

Остановим сервер и выберем русский язык для панели администрирования в файле settings.py, изменив значение параметра LANGUAGE_CODE с 'en-us' на 'ru'. Сохраняем файл комбинацией клавиш Ctrl+S.

Выбор русского языка для панели администрирования
Выбор русского языка для панели администрирования

Добавим ещё один раздел базы данных "Городах Сибири" с полями о численности их населения и области или крае, в котором они находятся. Для этого в приложении AppMySite откроем файл models.py и добавим класс SitiesOfSiberia и опишем поля nameOfSity, locationOfSity и sizeOfSity. Максимальная длина строки max_length, а blank=false значит, что поле не должно быть пустым. Не забываем сохранять изменения в файле.

class SitiesOfSiberia(models.Model):
nameOfSity = models.CharField(max_length=20, blank=False)
locationOfSity = models.CharField(max_length=40, blank=False)
sizeOfSity = models.IntegerField(default=0)

Создание базы данных "Города Сибири"
Создание базы данных "Города Сибири"

Раздел в панели администрирования или класс в models.py называется моделью базы данных. Зарегистрируем модель в файле admin.py для её отображения в панели. Произведём импорт класса
"from AppMySite.models import SitiesOfSiberia"
и регистрируем в панели раздел
"admin.site.register(SitiesOfSiberia)".

Регистрация модели в панели администрирования
Регистрация модели в панели администрирования

В терминале перейдём в папку projectMySite командой "cd projectMySite". Создадим файл миграций "python manage.py makemigrations" и произведём миграцию в базу данных "python manage.py migrate".

Запустим сервер, откроем панель администратора. Видим русифицированную панель и новый раздел Sities of Siberias.

Русифицированная панель администратора
Русифицированная панель администратора

В списке "Последние действия" видно, что в базу был добавлен город Барнаул. Кликнув по "+Барнаул Алтайский край" в этом списке, перейдём в меню настройки параметров записи об этом городе.

Меню настройки записи о городе
Меню настройки записи о городе

Из рисунка выше видны возможные варианты действий. Изменим численность города с 1 на 623057. Внесём число в поле sizeOfCity и нажмём кнопку СОХРАНИТЬ. Изменения внесены в базу данных.

Меню группы или списка записей городов
Меню группы или списка записей городов

После сохранения изменений в записи города, автоматически открывается меню списка городов. Список городов открывается, если кликнуть по "Sities of siberias" в разделе моделей приложения APPMYSITE в главном меню панели. Для добавления нового города в список нажмём "ДОБАВИТЬ SITIES OF SIBERIA +". При этом откроется такое же меню записи, как и для Барнаула, но с пустыми полями. Добавим город Кемерово.

Запись города Кемерово
Запись города Кемерово

Сохранить город с не указанной локацией или без имени не выйдет из-за параметра blank=false в файле models.py.

Обновлённый список городов Сибири
Обновлённый список городов Сибири

Из списка видно номер каждого объекта в базе данных "Города Сибири", но не видно его названия. Для возвращения имени объекта из поля nameOfSity базы данных нужно в файле models.py добавить метод "def __str__(self): return self.nameOfSity" к классу SitiesOfSiberia. После сохранения файла сервер автоматически перезапуститься, а изменения отобразятся после обновления страницы панели.

Добавление названия города в списке
Добавление названия города в списке
Список городов с отображёнными названиями
Список городов с отображёнными названиями

Отобразить название самого списка можно, добавив класс в файле admin.py
class Meta: # Параметры класса
verbose_name = str("Города Сибири") # имя класса
verbose_name_plural = str("Города Сибири") # имя во множественном числе

Добавление названия списка
Добавление названия списка
Отображение названия списка
Отображение названия списка

Отобразить название раздела панели можно, добавив строчку в файле apps.py
verbose_name = 'Города России' # Название приложения в панели

Добавление названия раздела в панели
Добавление названия раздела в панели
Отображение названия раздела в панели
Отображение названия раздела в панели

Для отображения полей в списке городов добавим класс в admin.py
class SitiesOfSiberiaAdmin(admin.ModelAdmin):
list_display = ('id','nameOfSity','locationOfSity','sizeOfSity')
А также зарегистрируем этот класс в функции ниже, добавив её название вторым параметром.

Класс добавляющий поля в список городов
Класс добавляющий поля в список городов
Отображение полей в списке городов
Отображение полей в списке городов

Имя поля в списке городов добавляется через параметр verbose_name в файле models.py

Добавление имён полей
Добавление имён полей
Отображение имён полей списка городов
Отображение имён полей списка городов

Если кликнуть по имени одного из полей, то записи городов отсортируются по этому полю. Например, ниже города отсортированы по названию.

Включена сортировка городов по названию
Включена сортировка городов по названию

В файле admin.py можно настраивать параметры внешнего вида разделов панели администрирования.

Класс настройки списка городов в панели
Класс настройки списка городов в панели

Оценим внешний вид списка в панели после внесённых изменений в настройки

Внешний вид панели администратора для списка "Города Сибири"
Внешний вид панели администратора для списка "Города Сибири"

Как видим, появилась возможность редактировать и сохранять записи списка. Кроме того, теперь есть возможность искать города по названию и локации, а справа появилось боковое меню для фильтрации записей по указанным полям.

Теперь добавим новый список городов "Города Европейской части" и добавим в него города Москву и Санкт-Петербург. Для этого в файле models.py создадим класс SitiesOfEurope аналогичный классу SitiesOfSiberia, но в подклассе Meta укажем своё название "Города Европейской части".

Добавили класс "Города Европейской части"
Добавили класс "Города Европейской части"

Теперь в файле admin.py импортируем класс SitiesOfEurope и зарегистрируем его в панели, а также укажем настройки нового списка городов в подклассе SitiesOfEuropeAdmin. Он аналогичен подклассу SitiesOfSiberiaAdmin.

Зарегистрировали класс "Города Европейской части" и указали настройки внешнего вида
Зарегистрировали класс "Города Европейской части" и указали настройки внешнего вида

Смотрим итог работы.

Списки городов России
Списки городов России

Но зайти в новый список мы не сможем. В базе данных не отражены изменения её конфигурации. Подготовим файл миграции и произведём её в терминале:
"cd projectMySite"
"python manage.py makemigrations"
"python manage.py migrate"

Теперь добавим данные через панель как делали для предыдущего списка.

Список "Города Европейской части"
Список "Города Европейской части"

Дорогой читатель, если вы добрались до конца статьи, я вас поздравляю! Извините, но в двух словах никак не вышло. Это, конечно, далеко не всё по базам данных, но давайте завершим на этом первое и "лёгкое" знакомство с панелью администрирования фреймворка Django.

Остались силы и желание работать дальше? Тогда перейдём к следующей статье "Работа с шаблонами сайта на Django", но чуть позже. Статья в разработке. Подпишитесь на канал, чтобы не терять полезную информацию!