✅ Разбор ответов на самопроверку

🎯 Итоговый разбор Django-блока К оглавлению урока

Сначала попробуйте ответить самостоятельно в разделе Задания, затем сверяйтесь здесь.

Блок 1: Фреймворк и структура проекта

1

Фреймворк vs библиотека

Библиотека — набор функций для конкретных задач. Вы вызываете её тогда, когда хотите, она не диктует архитектуру (например, requests, Pydantic).

Фреймворк — более широкий инструмент, который задаёт структуру приложения и вызывает ваш код по правилам («inversion of control»). Django — фреймворк: он задаёт, где лежат модели, как делаются миграции, как работает admin.

2

Создание проекта

pip install django
django-admin startproject config .

Точка в конце означает «создать структуру проекта в текущей папке», не создавая вложенного каталога с именем config. Это общепринятый подход: имя config используется как название конфигурационного пакета.

3

manage.py

manage.py — скрипт командной строки, интерфейс для управления проектом Django. Основные команды:

  • runserver — запуск сервера разработки
  • startapp — создание приложения
  • makemigrations — создание файлов миграций
  • migrate — применение миграций
  • createsuperuser — создание суперпользователя
  • shell — интерактивная оболочка
  • showmigrations — просмотр состояния миграций
4

settings.py

  • SECRET_KEY — уникальный ключ для криптографических операций (подпись cookie, CSRF-токены). Должен быть секретным и храниться в .env.
  • DEBUG=True — подробные страницы ошибок для разработки; False — продакшн (без утечки деталей).
  • ALLOWED_HOSTS — список доменов/IP, с которых Django принимает запросы. Защита от HTTP Host Header атак.
  • INSTALLED_APPS — список активных приложений. Django загружает только зарегистрированные приложения.
  • DATABASES — параметры подключения к БД. По умолчанию SQLite.
5

SECRET_KEY

SECRET_KEY используется для криптографических подписей (CSRF, сессии, password reset ссылки). Если его знает злоумышленник — он может подделать подпись любого токена.

Правильное хранение: файл .env в корне проекта (добавлен в .gitignore). Чтение через библиотеку django-environ:

SECRET_KEY = env('SECRET_KEY')

Блок 2: Приложения и Views

6

Приложение Django

Приложение — самодостаточный модуль, реализующий определённую функциональность. Создаётся командой:

python manage.py startapp myapp

Создаёт папку: migrations/, __init__.py, admin.py, apps.py, models.py, tests.py, views.py.

7

INSTALLED_APPS

INSTALLED_APPS = [
    ...
    'myapp.apps.MyappConfig',  # Рекомендуется
    # или просто 'myapp'  # Тоже работает, но хуже
]

Явное указание AppConfig позволяет Django корректно работать с сигналами приложения и переопределять verbose_name.

8

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: Модели и поля

9

Модель Django

Модель — Python-класс, наследующийся от models.Model. Каждый атрибут класса соответствует столбцу в таблице БД. Django автоматически создаёт поле id как BigAutoField (первичный ключ), если не задан явно.

10

Типы полей

ЗадачаПоле
Короткая строка (имя)CharField(max_length=100)
Длинный текстTextField()
EmailEmailField()
Число с плавающей запятойFloatField()
Дата без времениDateField()
Булево значениеBooleanField()
11

null vs blank

  • null=True — разрешает хранить NULL в базе данных (на уровне БД).
  • blank=True — разрешает пустое значение при валидации формы (на уровне Django).

Для необязательных строковых полей используют оба: blank=True, null=True. Для числовых и дат — часто только null=True.

12

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: Миграции

13

Что такое миграция?

Миграции — механизм версионирования изменений схемы БД. makemigrations — анализирует модели и создаёт Python-файл с описанием изменений. migrate — применяет ещё не применённые файлы к БД, записывает результат в таблицу django_migrations.

14

Добавление поля

Django спросит: «Вы хотите предоставить значение по умолчанию сейчас, или добавить null=True?». Если существующие записи есть, поле без default/null нарушит целостность БД.

Правильно: rating = models.IntegerField(default=0) или rating = models.IntegerField(null=True).

15

django_migrations

Специальная таблица в БД, которую создаёт Django при первом migrate. Хранит записи вида: (app, name, applied) — какие миграции из каких приложений были применены и когда. Позволяет migrate определять, какие миграции ещё нужно применить.

Блок 5: Admin и связи

16

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/
17

Связи ForeignKey

ForeignKey — связь «многие-к-одному». Много книг могут ссылаться на одного автора. Параметр on_delete задаёт поведение при удалении связанного объекта:

  • CASCADE — удалить зависимые объекты
  • SET_NULL — установить NULL (нужно null=True)
  • PROTECT — запретить удаление
  • SET_DEFAULT — установить значение по умолчанию
  • DO_NOTHING — ничего не делать
18

Три типа связей

ТипПолеПример
Многие-к-одномуForeignKeyМного книг — один автор
Многие-ко-многимManyToManyFieldКнига имеет несколько тегов, тег у нескольких книг
Один-к-одномуOneToOneFieldПользователь имеет один профиль