🏠 Домашнее задание
Это не LMS-задание. Урок 18 — итоговое повторение блока. Основная цель — проверить, насколько уверенно вы владеете темами уроков 13–17, прежде чем переходить к следующему блоку.
Задание: мини-проект «Библиотека»
Создайте Django-проект с нуля, реализующий простую систему управления книгами и авторами. Задание охватывает все темы блока: проект, приложение, модели, миграции, admin.
Подготовка окружения
Создание виртуального окружения
# PowerShell (Windows)
python -m venv venv
.\venv\Scripts\Activate.ps1
# Установка зависимостей
pip install django django-environ
pip freeze > requirements.txt
Создание проекта
django-admin startproject config .
python manage.py startapp library
Создание .env и .gitignore
# .env
SECRET_KEY=django-dev-secret-key-change-in-production
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
# .gitignore
.env
*.pyc
__pycache__/
db.sqlite3
venv/
.venv/
Реализация
Настройка settings.py
Настройте config/settings.py: подключите django-environ, считайте SECRET_KEY из .env, добавьте 'library.apps.LibraryConfig' в INSTALLED_APPS, установите DEFAULT_AUTO_FIELD = BigAutoField.
Создание моделей
В файле library/models.py создайте три модели:
- Author: name (CharField), bio (TextField, необязательное), birth_year (PositiveSmallIntegerField, необязательное)
- Genre: name (CharField, unique=True)
- Book: title (CharField), author (ForeignKey → Author, CASCADE), genres (ManyToManyField → Genre, blank=True), published_year (PositiveIntegerField, необязательное), description (TextField, необязательное), is_available (BooleanField, default=True)
Добавьте метод __str__ в каждую модель.
Создание и применение миграций
python manage.py makemigrations
python manage.py migrate
python manage.py showmigrations # Проверка
Настройка Admin
В library/admin.py зарегистрируйте все три модели. Для BookAdmin настройте: list_display (title, author, is_available), search_fields (title, author__name), list_filter (is_available, genres).
Создание суперпользователя и проверка
python manage.py createsuperuser
python manage.py runserver
Откройте http://127.0.0.1:8000/admin/ и добавьте несколько авторов, жанров и книг через интерфейс.
Проверка в VS Code
Запуск через F5 (launch.json)
Создайте файл .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Django",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": ["runserver"],
"django": true,
"justMyCode": true
}
]
}
Нажмите F5 — сервер запустится с поддержкой точек останова. Поставьте breakpoint в views.py на функцию hello_world и откройте URL — VS Code остановится на строке.
Критерии выполнения
- Три модели (Author, Genre, Book) с правильными типами полей
- Связи ForeignKey и ManyToManyField работают корректно
- Миграции созданы и применены без ошибок
- Все три модели видны в /admin/ и позволяют создавать объекты
- SECRET_KEY не в коде, а в .env (который в .gitignore)
- requirements.txt зафиксирован
Связь с разделами курса
- Типы полей: theory.html#models
- Связи: theory.html#relations
- Примеры моделей: examples.html
- Частые ошибки: mistakes.html