1. Фреймворк и библиотека
| Понятие | Описание | Преимущества |
| Фреймворк |
Набор инструментов, шаблонов и структур для упрощения и ускорения разработки приложений |
Ускорение разработки, соблюдение стандартов, безопасность, масштабируемость |
| Библиотека |
Набор функций и классов для выполнения конкретных задач. Не накладывает жёстких ограничений на архитектуру |
Переиспользование кода, разделение ответственности, улучшение обслуживаемости |
Популярные Python-фреймворки
| Фреймворк | Особенности |
| Django | ORM, административный интерфейс, множество встроенных инструментов |
| Flask | Большая свобода в выборе компонентов и архитектуры |
| FastAPI | Автогенерация документации, высокая производительность |
Почему Django?
- Широко применяется в индустрии, доказанная репутация
- Расширения и пакеты для дополнительной функциональности
- Поддержка PostgreSQL, MySQL, SQLite, Oracle и других СУБД
- Большое и активное сообщество разработчиков
2. Создание проекта и структура файлов
Создание проекта
# Установка Django
pip install django
# Создание проекта (точка — создаёт структуру в текущей папке)
django-admin startproject config .
# Запуск сервера разработки
python manage.py runserver # http://127.0.0.1:8000/
Роль manage.py
| Команда | Действие |
python manage.py runserver | Запустить сервер разработки |
python manage.py startapp myapp | Создать новое приложение |
python manage.py makemigrations | Создать файлы миграций |
python manage.py migrate | Применить миграции к БД |
python manage.py createsuperuser | Создать суперпользователя |
python manage.py shell | Запустить Django-оболочку |
Ключевые файлы settings.py
| Настройка | Описание |
SECRET_KEY | Уникальный ключ для криптографических операций. Никогда не хранить в коде — только в .env |
DEBUG | True — режим разработки (детальные ошибки). False — продакшн |
ALLOWED_HOSTS | Список разрешённых доменов/IP. Защита от HTTP Host Header атак |
INSTALLED_APPS | Список зарегистрированных приложений (встроенных и своих) |
DATABASES | Конфигурация подключения к БД. По умолчанию SQLite |
MIDDLEWARE | Цепочка промежуточного ПО (безопасность, сессии, CSRF, auth…) |
ROOT_URLCONF | Путь к главному файлу маршрутизации (config.urls) |
DEFAULT_AUTO_FIELD | Тип поля для автоматического PK. Рекомендуется BigAutoField |
3. Приложения Django
Django-приложение — самодостаточный модуль, выполняющий определённую функциональность. Может переиспользоваться в других проектах.
# Создание приложения
python manage.py startapp myapp
Структура приложения
myapp/
|-- migrations/
| |-- __init__.py # Директория для файлов миграций
|-- __init__.py # Python-пакет
|-- admin.py # Регистрация моделей в admin-панели
|-- apps.py # Конфигурация приложения
|-- models.py # Определения моделей (таблиц БД)
|-- tests.py # Тесты приложения
|-- views.py # Представления (обрабатывают запросы)
Регистрация приложения
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Своё приложение — лучше через конфигурационный класс
'myapp.apps.MyappConfig',
]
4. Модели Django
Модель — класс, наследующийся от models.Model. Описывает структуру таблицы в БД: поля, типы, ограничения.
# myapp/models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
published_date = models.DateField()
# id добавляется автоматически как BigAutoField (первичный ключ)
Типы полей по категориям
| Категория | Поля |
| Строковые | CharField, TextField, EmailField, SlugField, URLField |
| Числовые | IntegerField, BigIntegerField, PositiveIntegerField, FloatField, DecimalField, SmallIntegerField |
| Логические | BooleanField |
| Дата/время | DateField, TimeField, DateTimeField, DurationField |
| Файлы | FileField, ImageField, FilePathField |
| Прочие | UUIDField, GenericIPAddressField, BinaryField |
| Связи | ForeignKey, ManyToManyField, OneToOneField |
Общие параметры полей
| Параметр | Описание | По умолчанию |
null | Разрешает NULL в БД | False |
blank | Разрешает пустое значение в формах | False |
default | Значение по умолчанию | — |
unique | Уникальность значения | False |
max_length | Максимальная длина строки | — |
verbose_name | Читаемое имя в admin и формах | — |
help_text | Подсказка в admin и формах | — |
db_index | Создаёт индекс в БД | False |
primary_key | Делает поле первичным ключом | False |
choices | Ограничивает набором вариантов | — |
validators | Список валидаторов | — |
5. Механизм миграций
Миграции — механизм версионирования изменений схемы БД. Позволяют изменять модели и применять изменения без потери данных.
# 1. Создать файлы миграций (анализирует models.py)
python manage.py makemigrations
# 2. Применить миграции к БД
python manage.py migrate
# Просмотр состояния миграций
python manage.py showmigrations
Механизм работы
- Обнаружение изменений — Django сравнивает текущие модели с предыдущими миграциями
- Создание файла — генерирует Python-скрипт в migrations/ (0001_initial.py, 0002_xxx.py…)
- Применение —
migrate проверяет таблицу django_migrations, применяет непримененные
- Обновление реестра — добавляет запись в django_migrations
- Откат — при ошибке откатывается через транзакции
Нюансы изменения моделей
| Операция | Проблема | Решение |
| Добавить поле | Неизвестное значение для существующих записей | Указать null=True или default=... |
| Изменить тип поля | Несовместимость с существующими данными | Обновить данные заранее, применять постепенно |
| Удалить поле | Потеря данных | Резервная копия, убедиться что данные не нужны |
6. Административная панель
Django Admin — встроенный веб-интерфейс для управления данными моделей. Доступен по адресу /admin/.
# myapp/admin.py
from django.contrib import admin
from .models import Book
# Простая регистрация
admin.site.register(Book)
# Расширенная регистрация через ModelAdmin
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ['title', 'author', 'published_date']
search_fields = ['title', 'author']
list_filter = ['published_date']
ordering = ['-published_date']
Суперпользователь
# Создание суперпользователя
python manage.py createsuperuser
# → вводим username, email, password
# Запуск сервера и вход в admin
python manage.py runserver
# Открыть: http://127.0.0.1:8000/admin/
7. Связи между моделями
| Тип связи | Поле | Описание |
| Многие-к-одному | ForeignKey | Много книг у одного автора. Создаёт столбец author_id |
| Многие-ко-многим | ManyToManyField | Книга у многих авторов и автор у многих книг. Создаёт промежуточную таблицу |
| Один-к-одному | OneToOneField | У пользователя один профиль. Уникальная ссылка |
# Пример ForeignKey
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(
Author,
on_delete=models.CASCADE, # Удалить книги при удалении автора
related_name='books'
)
# Пример ManyToManyField
class Tag(models.Model):
name = models.CharField(max_length=50)
class Article(models.Model):
title = models.CharField(max_length=200)
tags = models.ManyToManyField(Tag, blank=True)
# Пример OneToOneField
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(blank=True)