✅ Разбор ответов на самопроверку
Сначала попробуйте ответить самостоятельно в разделе Задания, затем сверяйтесь здесь.
Блок 1: Фреймворк и структура проекта
Фреймворк vs библиотека
Библиотека — набор функций для конкретных задач. Вы вызываете её тогда, когда хотите, она не диктует архитектуру (например, requests, Pydantic).
Фреймворк — более широкий инструмент, который задаёт структуру приложения и вызывает ваш код по правилам («inversion of control»). Django — фреймворк: он задаёт, где лежат модели, как делаются миграции, как работает admin.
Создание проекта
pip install django
django-admin startproject config .
Точка в конце означает «создать структуру проекта в текущей папке», не создавая вложенного каталога с именем config. Это общепринятый подход: имя config используется как название конфигурационного пакета.
manage.py
manage.py — скрипт командной строки, интерфейс для управления проектом Django. Основные команды:
runserver— запуск сервера разработкиstartapp— создание приложенияmakemigrations— создание файлов миграцийmigrate— применение миграцийcreatesuperuser— создание суперпользователяshell— интерактивная оболочкаshowmigrations— просмотр состояния миграций
settings.py
SECRET_KEY— уникальный ключ для криптографических операций (подпись cookie, CSRF-токены). Должен быть секретным и храниться в .env.DEBUG=True— подробные страницы ошибок для разработки;False— продакшн (без утечки деталей).ALLOWED_HOSTS— список доменов/IP, с которых Django принимает запросы. Защита от HTTP Host Header атак.INSTALLED_APPS— список активных приложений. Django загружает только зарегистрированные приложения.DATABASES— параметры подключения к БД. По умолчанию SQLite.
SECRET_KEY
SECRET_KEY используется для криптографических подписей (CSRF, сессии, password reset ссылки). Если его знает злоумышленник — он может подделать подпись любого токена.
Правильное хранение: файл .env в корне проекта (добавлен в .gitignore). Чтение через библиотеку django-environ:
SECRET_KEY = env('SECRET_KEY')
Блок 2: Приложения и Views
Приложение Django
Приложение — самодостаточный модуль, реализующий определённую функциональность. Создаётся командой:
python manage.py startapp myapp
Создаёт папку: migrations/, __init__.py, admin.py, apps.py, models.py, tests.py, views.py.
INSTALLED_APPS
INSTALLED_APPS = [
...
'myapp.apps.MyappConfig', # Рекомендуется
# или просто 'myapp' # Тоже работает, но хуже
]
Явное указание AppConfig позволяет Django корректно работать с сигналами приложения и переопределять verbose_name.
View и URL
# myapp/views.py
from django.http import HttpResponse
def hello_world(request):
return HttpResponse("<h1>Hello, World!</h1>")
# myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('hello/', views.hello_world, name='hello_world'),
]
Блок 3: Модели и поля
Модель Django
Модель — Python-класс, наследующийся от models.Model. Каждый атрибут класса соответствует столбцу в таблице БД. Django автоматически создаёт поле id как BigAutoField (первичный ключ), если не задан явно.
Типы полей
| Задача | Поле |
|---|---|
| Короткая строка (имя) | CharField(max_length=100) |
| Длинный текст | TextField() |
EmailField() | |
| Число с плавающей запятой | FloatField() |
| Дата без времени | DateField() |
| Булево значение | BooleanField() |
null vs blank
null=True— разрешает хранить NULL в базе данных (на уровне БД).blank=True— разрешает пустое значение при валидации формы (на уровне Django).
Для необязательных строковых полей используют оба: blank=True, null=True. Для числовых и дат — часто только null=True.
choices
from django.db import models
class Article(models.Model):
STATUS_CHOICES = [
('draft', 'Черновик'),
('published', 'Опубликовано'),
]
title = models.CharField(max_length=200)
status = models.CharField(
max_length=10,
choices=STATUS_CHOICES,
default='draft'
)
Блок 4: Миграции
Что такое миграция?
Миграции — механизм версионирования изменений схемы БД. makemigrations — анализирует модели и создаёт Python-файл с описанием изменений. migrate — применяет ещё не применённые файлы к БД, записывает результат в таблицу django_migrations.
Добавление поля
Django спросит: «Вы хотите предоставить значение по умолчанию сейчас, или добавить null=True?». Если существующие записи есть, поле без default/null нарушит целостность БД.
Правильно: rating = models.IntegerField(default=0) или rating = models.IntegerField(null=True).
django_migrations
Специальная таблица в БД, которую создаёт Django при первом migrate. Хранит записи вида: (app, name, applied) — какие миграции из каких приложений были применены и когда. Позволяет migrate определять, какие миграции ещё нужно применить.
Блок 5: Admin и связи
Admin-панель
# admin.py
from django.contrib import admin
from .models import Book
admin.site.register(Book)
# Создание суперпользователя
python manage.py createsuperuser
# Адрес: http://127.0.0.1:8000/admin/
Связи ForeignKey
ForeignKey — связь «многие-к-одному». Много книг могут ссылаться на одного автора. Параметр on_delete задаёт поведение при удалении связанного объекта:
CASCADE— удалить зависимые объектыSET_NULL— установить NULL (нужно null=True)PROTECT— запретить удалениеSET_DEFAULT— установить значение по умолчаниюDO_NOTHING— ничего не делать
Три типа связей
| Тип | Поле | Пример |
|---|---|---|
| Многие-к-одному | ForeignKey | Много книг — один автор |
| Многие-ко-многим | ManyToManyField | Книга имеет несколько тегов, тег у нескольких книг |
| Один-к-одному | OneToOneField | Пользователь имеет один профиль |