Краткая самостоятельная шпаргалка: тема, суть простыми словами, ссылка на подробный раздел внутри этого же документа и пример экзаменационного вопроса.
Карта тем
1. Адресация, IPv4, IPv6
Кратко:IP-адрес нужен, чтобы доставить пакет до конкретного узла сети. IPv4 записывается как четыре числа и занимает 32 бита, поэтому адресов мало; IPv6 занимает 128 бит и записывается шестнадцатеричными блоками. Доменное имя само по себе не является сетевым адресом: перед подключением DNS превращает его в IP.
Кратко:TCP устанавливает соединение и контролирует доставку данных: порядок, подтверждения и повторную отправку. IP выбирает устройство, а порт выбирает приложение на этом устройстве. Маска подсети отделяет адрес сети от адреса хоста, а NAT позволяет приватным адресам локальной сети выходить наружу через публичный IP.
Кратко:DNS сопоставляет доменное имя с IP-адресом, чтобы браузер понял, к какому серверу подключаться. URI - общее понятие для идентификатора ресурса. URL является частным случаем URI: он указывает, где находится ресурс и как его получить; URN задаёт устойчивое имя без обязательного сетевого адреса.
Вопрос:Почему URL является URI, но не каждый URI является URL?
4. HTTP, HTTPS, HTTP/3
Кратко:HTTP - прикладной протокол обмена сообщениями: клиент отправляет запрос, сервер возвращает ответ со статусом, заголовками и, возможно, телом. GET обычно получает данные, POST отправляет данные в теле запроса. HTTPS - это HTTP внутри TLS-соединения, а HTTP/3 сохраняет смысл HTTP, но использует QUIC поверх UDP.
Кратко:Идентификация отвечает на вопрос "кто пользователь?", аутентификация проверяет доказательство личности, например пароль или код. Авторизация решает, какие действия разрешены уже проверенному пользователю. OAuth 2.0 используется, чтобы стороннее приложение получило ограниченный access token без получения пароля пользователя.
Вопрос:Почему OAuth 2.0 называют протоколом авторизации?
6. HTML-документ
Кратко:HTML описывает смысловую структуру страницы: заголовки, абзацы, ссылки, изображения, таблицы и разделы. В head находятся служебные данные: кодировка, viewport, заголовок вкладки, подключение CSS и скриптов. В body находится видимый контент; семантические теги помогают показать назначение частей страницы.
Кратко:HTML-форма собирает ввод пользователя и отправляет его на сервер по адресу из action методом GET или POST. Атрибут name определяет имя параметра в запросе, а id обычно нужен для связи поля с label. required, type и другие атрибуты дают базовую проверку в браузере.
Кратко:CSS-селектор выбирает элементы, к которым применяются свойства. При конфликте правил учитываются каскад, специфичность и порядок записи. ID сильнее класса, класс сильнее тега; если специфичность равна, побеждает правило, написанное ниже.
Вопрос:Какой селектор сильнее: body .content или div p?
9. CSS box model и базовые свойства
Кратко:Каждый элемент в CSS рассматривается как прямоугольный блок: content, padding, border и margin. При content-box ширина задаёт только content, а padding и border добавляются сверху. При border-box заданная ширина уже включает content, padding и border, поэтому размеры проще контролировать.
Вопрос:Какая ширина у блока с width:100px и box-sizing:border-box?
10. Flexbox и Grid
Кратко:Flexbox удобен для одномерной раскладки: элементы распределяются вдоль главной оси, а поперечная ось используется для выравнивания. Grid решает двумерные задачи: одновременно управляет строками, столбцами, линиями, ячейками и областями. fr, repeat() и minmax() помогают задавать гибкую сетку.
Кратко:Модель Django описывает таблицу базы данных: класс - таблица, поле - колонка, объект - строка. ORM позволяет строить SQL-запросы через Python-методы вроде filter(), get(), annotate() и aggregate(). QuerySet ленивый: запрос обычно выполняется только тогда, когда реально нужны данные.
Вопрос:Когда использовать select_related, а когда prefetch_related?
12. Django views, URLs, templates, forms
Кратко:Django view принимает request и возвращает HTTP-ответ: HTML, redirect, JSON или ошибку. URL-маршрут связывает путь с view, шаблон получает context и отображает данные, а форма описывает поля, валидирует ввод и отдаёт очищенные значения через cleaned_data. FBV проще как функция, CBV удобнее для типовых страниц.
TCP устанавливает соединение через три шага: SYN, SYN-ACK, ACK. Он следит за порядком данных, потерями и повторной отправкой.
Порт выбирает приложение внутри одного IP-адреса. HTTP обычно работает на 80, HTTPS - на 443.
Маска подсети показывает, где в IP-адресе часть сети, а где часть хоста. В 192.168.1.10/24 сеть - 192.168.1.0, хост - .10.
NAT переводит приватные адреса во внешний публичный адрес. PAT дополнительно использует порты, поэтому много внутренних устройств могут выходить через один публичный IP.
TCPНадёжный транспортный протокол. Перед передачей устанавливает соединение и подтверждает получение данных.
UDPТранспортный протокол без соединения и подтверждений. Быстрее, но не гарантирует доставку и порядок.
SYNПервый пакет TCP-рукопожатия: клиент просит открыть соединение.
SYN-ACKОтвет сервера: запрос принят, сервер тоже готов открыть соединение.
ACKПодтверждение клиента. После него TCP-соединение считается установленным.
ПортЧисло от 0 до 65535, которое указывает процесс или сервис внутри IP-адреса.
Маска подсетиПоказывает, какие биты IP относятся к сети, а какие к хосту.
CIDRКраткая запись маски, например /24. Число показывает количество сетевых бит.
NATЗамена адресов на границе сети. Обычно приватный адрес заменяется публичным.
PATВариант NAT с портами. Позволяет многим внутренним устройствам использовать один внешний IP.
Трёхстороннее рукопожатие TCP
SYN: клиент говорит "хочу соединиться".
SYN-ACK: сервер говорит "готов, подтверждаю".
ACK: клиент подтверждает ответ сервера.
Подсеть на примере
192.168.1.10/24: первые 24 бита - сеть, последние 8 бит - хосты. Адрес сети 192.168.1.0, типичный шлюз 192.168.1.1, устройства часто получают адреса 192.168.1.2 ... 192.168.1.254.
Если два IP в одной подсети, устройство может отправить кадр напрямую в локальную сеть. Если адрес в другой подсети, пакет идёт через шлюз.
Идентификация: пользователь сообщает, кто он. Аутентификация: система проверяет доказательство. Авторизация: система проверяет права.
OAuth 2.0 позволяет приложению получить access token без знания пароля пользователя. Права ограничиваются scope, сроком жизни токена и настройками сервиса.
Клиент отправляет пользователя на authorization server.
Пользователь подтверждает доступ.
Клиент получает authorization code.
Код меняется на access token.
Access token используется для API-запросов.
ИдентификацияПользователь сообщает идентификатор: логин, email, номер телефона.
Flexbox создаётся через display: flex или display: inline-flex. Главная ось зависит от flex-direction.
justify-content выравнивает по главной оси, align-items - по поперечной. Значение align-items по умолчанию - stretch.
flex-grow отвечает за рост, flex-shrink - за сжатие, flex-basis - за базовый размер.
Grid создаётся через display: grid. grid-template-columns задаёт столбцы, grid-template-rows - строки. fr - доля свободного места. repeat() сокращает повтор, minmax() задаёт минимум и максимум.
Flexbox: термины
Flex containerЭлемент с display: flex или inline-flex.
Flex itemПрямой дочерний элемент flex-контейнера.
Main axisГлавная ось. Её направление задаёт flex-direction.
MigrationФайл изменения схемы БД. Создаётся из изменений моделей.
makemigrationsСоздаёт файлы миграций.
migrateПрименяет миграции к базе данных.
Class MetaВнутренний класс настроек модели: сортировка, имена, ограничения.
ManagerОбъект доступа к запросам, обычно objects.
Поля модели
Поле
Смысл
CharField
Короткая строка. Требует max_length.
TextField
Длинный текст без обязательного лимита длины.
IntegerField
Целое число.
DecimalField
Точное десятичное число, удобно для денег. Нужны max_digits, decimal_places.
BooleanField
True или False.
DateField
Дата без времени.
DateTimeField
Дата и время.
EmailField
Строка с email-валидацией на уровне формы/модели.
FileField
Путь к загруженному файлу.
ImageField
Файл изображения, требует поддержку обработки изображений.
ForeignKey
Связь многие-к-одному.
OneToOneField
Связь один-к-одному.
ManyToManyField
Связь многие-ко-многим.
Атрибуты полей
max_lengthМаксимальная длина строки. Обязателен для CharField.
null=TrueРазрешает хранить NULL в базе данных.
blank=TrueРазрешает пустое значение в форме и админке.
defaultЗначение по умолчанию.
primary_key=TrueДелает поле первичным ключом.
unique=TrueЗначение должно быть уникальным.
verbose_nameЧеловекочитаемое имя поля.
related_nameИмя обратной связи для связанных объектов.
Связи
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.PROTECT, related_name="books")
Прямая связь: book.author. Обратная связь через related_name: author.books.all().
on_delete
Что делает
CASCADE
Удаляет зависимые объекты вместе с главным.
PROTECT
Запрещает удалить объект, если на него есть ссылки.
SET_NULL
Записывает NULL, требует null=True.
SET_DEFAULT
Записывает значение по умолчанию.
DO_NOTHING
Django ничего не делает, ответственность остаётся на БД/коде.
QuerySet и ленивость
QuerySet можно строить цепочкой, и Django не обязательно сразу идёт в БД. Запрос выполняется, когда данные реально нужны: цикл, индексация, вывод, list(), count(), exists().
qs = Product.objects.filter(is_active=True).order_by("-price")
# БД ещё может не быть затронута
for product in qs:
print(product.name)
Lookups
Lookup
Смысл
exact
Точное совпадение.
iexact
Точное совпадение без учёта регистра.
contains
Содержит подстроку с учётом регистра.
icontains
Содержит подстроку без учёта регистра.
gt, gte
Больше, больше или равно.
lt, lte
Меньше, меньше или равно.
in
Значение входит в список.
range
Значение в диапазоне.
isnull
Проверка на NULL.
Q и F
Q нужен для сложной логики OR, AND, NOT. F нужен, чтобы обращаться к значениям полей на стороне БД.
В шаблонах переменные пишутся как {{ value }}, теги как {% tag %}, фильтры как {{ value|lower }}. Если переменной нет, обычно выводится пустая строка.
forms.Form - обычная форма. forms.ModelForm - форма на основе модели. Для связи между полями используют общий метод clean(). После is_valid() доступны cleaned_data и errors.
Views
ViewКод, который принимает HTTP-запрос и возвращает HTTP-ответ.
FBVFunction-Based View. Представление как обычная функция.
CBVClass-Based View. Представление как класс с готовыми методами.