# kodkod | Вводный курс > Вводный курс Full Stack – 5 недель: компьютер, операционная система и сети, профессиональный Python, отладка и Git, ООП, backend и базы данных - [Политика конфиденциальности и условия использования](https://intro-kodkod-6.nm-ambition.com/ru/privacy/): Этот сайт предназначен только для студентов курса — не передавайте ссылку другим. Здесь также описана наша политика конфиденциальности. - [Вход](https://intro-kodkod-6.nm-ambition.com/ru/login/): Вход на сайт курса - [Мой профиль](https://intro-kodkod-6.nm-ambition.com/ru/profile/): Ваше имя, описание и цвет в чате курса - [Новый пароль](https://intro-kodkod-6.nm-ambition.com/ru/reset-password/): Выбор нового пароля для учётной записи - [Регистрация](https://intro-kodkod-6.nm-ambition.com/ru/signup/): Регистрация на сайте курса - [Сброс пароля](https://intro-kodkod-6.nm-ambition.com/ru/forgot-password/): Запрос ссылки для сброса пароля - [Чат курса](https://intro-kodkod-6.nm-ambition.com/ru/chat/): Общий групповой чат для всех учащихся курса - [Вводный курс Кодкод](https://intro-kodkod-6.nm-ambition.com/ru/docs/): Введение в Full Stack: компьютер, операционная система и сети, профессиональный Python, отладка и Git, ООП, бэкенд и базы данных ## Вводный курс Кодкод > Введение в Full Stack: компьютер, операционная система и сети, профессиональный Python, отладка и Git, ООП, бэкенд и базы данных - [Установка программ](https://intro-kodkod-6.nm-ambition.com/ru/docs/installations/): Всё, что устанавливают на курсе: Python, VS Code, Git и Docker в первый день, как проверить, что всё работает, и что добавится позже. Практическая теоретическая тема, без кода. - [Компьютер и операционная система](https://intro-kodkod-6.nm-ambition.com/ru/docs/computer-and-os/): Рабочая среда и терминал, как устроен компьютер и как на нём выполняется программа: компоненты оборудования, виды языков программирования, операционная система, процессы, файлы и права доступа. Теоретическая тема. - [Сети и интернет](https://intro-kodkod-6.nm-ambition.com/ru/docs/networking/): Как компьютеры общаются друг с другом: клиент-сервер, IP-адреса, порты и DNS, модель уровней и протоколы, и что происходит в браузере. Теоретическая тема. - [Профессиональный Python, чистый код и отладка](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-clean-code/): Имена и маленькие функции, DRY/KISS и разделение ответственности, баги, stack trace и упорядоченный процесс отладки. - [Исключения и логирование](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-errors-logging/): Обработка ошибок с try/except/else/finally, выбрасывание ошибок с raise и запись того, что происходит в программе, с помощью logging — в том числе в файл. - [Git и GitHub](https://intro-kodkod-6.nm-ambition.com/ru/docs/git/): Контроль версий: зачем он нужен, базовые команды Git и работа с GitHub с помощью push. - [Структуры данных и функции](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/): list, tuple, set и dict, срезы и изменяемость, функции с args/kwargs/lambda, область видимости (LEGB) и продвинутые функции: чистые функции, функции высшего порядка, nonlocal и декораторы. - [Модули, файлы и JSON](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-modules-files/): Разделение кода на модули и пакеты, работа с текстовыми файлами и with, сохранение и чтение данных в формате JSON. - [ООП – объектно-ориентированное программирование](https://intro-kodkod-6.nm-ambition.com/ru/docs/oop/): Классы и объекты, состояние, инкапсуляция и property, наследование и полиморфизм, проектирование в ООП — от задачи до готовой системы. - [Бэкенд и FastAPI](https://intro-kodkod-6.nm-ambition.com/ru/docs/backend-fastapi/): Что такое бэкенд, HTTP-методы и коды состояния, path/query/body, создание первого сервера на FastAPI и middleware, которое выполняется при каждом запросе. - [Базы данных и MySQL](https://intro-kodkod-6.nm-ambition.com/ru/docs/databases/): Что такое база данных, MySQL в контейнере Docker с интерфейсом в VS Code, создание таблиц и запросов и полный набор операций CRUD из Python. - [Students API – сервер с базой данных](https://intro-kodkod-6.nm-ambition.com/ru/docs/students-api/): Подключение маршрутов к базе данных, Students API с полным CRUD и тестирование через Swagger. ### Установка программ > Всё, что устанавливают на курсе: Python, VS Code, Git и Docker в первый день, как проверить, что всё работает, и что добавится позже. Практическая теоретическая тема, без кода. - [Установка программ: всё, что устанавливают на курсе](https://intro-kodkod-6.nm-ambition.com/ru/docs/installations/01-installations/): Все инструменты курса — Python, VS Code, Git и Docker в первый день и то, что добавится позже: для чего нужен каждый инструмент, как установить его шаг за шагом и как проверить, что всё работает. ### Компьютер и операционная система > Рабочая среда и терминал, как устроен компьютер и как на нём выполняется программа: компоненты оборудования, виды языков программирования, операционная система, процессы, файлы и права доступа. Теоретическая тема. - [Рабочая среда: терминал и первый файл с кодом](https://intro-kodkod-6.nm-ambition.com/ru/docs/computer-and-os/01-dev-environment/): Командная строка — терминал, оболочка и базовые команды, — рабочая папка курса, и что такое файл с кодом и как его запустить. - [Как работает компьютер: компоненты, запуск программы и языки программирования](https://intro-kodkod-6.nm-ambition.com/ru/docs/computer-and-os/02-how-computers-work/): Компоненты компьютера (CPU, RAM, накопитель, регистры), что происходит с момента запуска программы до её выполнения, и виды языков программирования. - [Операционная система: ядро, процессы, файлы и права доступа](https://intro-kodkod-6.nm-ambition.com/ru/docs/computer-and-os/03-operating-system/): Что делает операционная система и что такое ядро, программа и процесс и управление памятью, а также файловая система, пользователи и права доступа. ### Сети и интернет > Как компьютеры общаются друг с другом: клиент-сервер, IP-адреса, порты и DNS, модель уровней и протоколы, и что происходит в браузере. Теоретическая тема. - [Сети и интернет: клиент-сервер, адреса, протоколы и путь запроса](https://intro-kodkod-6.nm-ambition.com/ru/docs/networking/01-networks-internet/): Как общаются компьютеры: сети и модель клиент-сервер, IP-адреса, порты и DNS, модель уровней и протоколы, и что происходит с момента ввода адреса до показа сайта. ### Профессиональный Python, чистый код и отладка > Имена и маленькие функции, DRY/KISS и разделение ответственности, баги, stack trace и упорядоченный процесс отладки. - [Чистый код A: хорошие имена, маленькие функции и единственная ответственность](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-clean-code/03-naming-and-small-functions/): Почему важен чистый код, как выбирать имена для переменных, функций и файлов и как разбить длинную функцию на маленькие функции с единственной ответственностью (Single Responsibility). - [Чистый код B: DRY, KISS, разделение ответственности, комментарии и рефакторинг](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-clean-code/04-dry-kiss-soc-comments/): Четыре принципа, которые сохраняют код здоровым со временем, — не повторяйся (DRY), будь проще (KISS), разделяй разные части (Separation of Concerns) — и когда действительно нужны комментарии. В конце: как безопасно улучшать существующий код. - [Отладка A: что такое баг, виды ошибок и чтение Stack Trace](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-clean-code/05-bugs-and-stack-trace/): Что такое баг, три вида ошибок — Syntax, Runtime и Logical — и как читать сообщение об ошибке и Stack Trace снизу вверх, чтобы точно найти, где и почему сломался код. - [Отладка B: процесс отладки и отладчик VS Code](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-clean-code/06-debugging-process-and-tools/): Упорядоченный процесс поиска багов — воспроизвести, изолировать, понять первопричину, исправить и проверить — и практическая работа с Breakpoint, Step Over, Step Into, окном Variables и Call Stack, включая решение настоящего бага от начала до конца. ### Исключения и логирование > Обработка ошибок с try/except/else/finally, выбрасывание ошибок с raise и запись того, что происходит в программе, с помощью logging — в том числе в файл. - [Исключения A: зачем нужна обработка ошибок, try и except](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-errors-logging/01-try-except/): Что такое исключение (Exception), почему настоящая программа не может просто падать, как поймать ошибку с помощью try/except и как правильно обрабатывать несколько разных видов исключений. - [Исключения B: else и finally — полная структура](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-errors-logging/02-else-finally/): Полная структура try/except/else/finally — что и когда выполняется, почему else отделяет рискованный код от кода, зависящего от успеха, и почему finally — место для очистки, которая должна происходить всегда. - [Исключения C: raise — выбрасываем ошибку сами](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-errors-logging/03-raise/): Как и когда самим выбрасывать исключение с помощью raise, как выбрать подходящий тип ошибки и почему функции лучше выбросить понятную ошибку, чем молча вернуть неверное значение, — включая передачу ошибки дальше вызывающему коду. - [Логирование A: почему print — это не логирование, и уровни лога](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-errors-logging/04-logging-basics/): Разница между print и логированием (Logging), что такое лог и почему каждая настоящая система его пишет, пять уровней лога — debug, info, warning, error, critical — и как задать, какой уровень показывать. - [Логирование B: сохранение логов в файл и запись важных действий](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-errors-logging/05-logging-to-file/): Как сохранять логи в файл, который остаётся после завершения программы, режимы записи (дописывание и перезапись), запись исключений с полным Traceback с помощью logging.exception и что именно стоит записывать. ### Git и GitHub > Контроль версий: зачем он нужен, базовые команды Git и работа с GitHub с помощью push. - [Контроль версий: зачем он нужен и базовые понятия Git](https://intro-kodkod-6.nm-ambition.com/ru/docs/git/01-version-control-concepts/): Что такое контроль версий и какую проблему он решает, что такое Git, три области, с которыми работает каждая команда Git, — Working Directory, Staging Area и Repository, — и что такое Commit. - [Базовые команды Git: init, status, add, commit, log](https://intro-kodkod-6.nm-ambition.com/ru/docs/git/02-git-basic-commands/): Ежедневная работа с Git шаг за шагом — создание репозитория, чтение git status, добавление в Staging, Commit с сообщением, просмотр истории и различий (log, diff) и файл .gitignore. - [GitHub, Remote и Push — и хорошие сообщения Commit](https://intro-kodkod-6.nm-ambition.com/ru/docs/git/03-github-remote-push/): Создание репозитория на GitHub, подключение Remote к локальному репозиторию, загрузка кода через git push, аутентификация на GitHub и правила написания понятных сообщений Commit. ### Структуры данных и функции > list, tuple, set и dict, срезы и изменяемость, функции с args/kwargs/lambda, область видимости (LEGB) и продвинутые функции: чистые функции, функции высшего порядка, nonlocal и декораторы. - [list: создание, доступ, добавление, удаление, поиск и перебор](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/01-list/): Всё о list с основ: как создать список, положительные и отрицательные индексы, добавление (append, insert), удаление (remove, pop, del), поиск (in, index, count), перебор и сортировка. - [tuple и set: фиксированная запись и коллекция без повторов](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/02-tuple-and-set/): tuple — фиксированная последовательность, которую нельзя изменить, и её распаковка в переменные; set — коллекция без повторов и без порядка, быстрая проверка принадлежности и операции над множествами: объединение, пересечение и разность. - [dict: ключ и значение](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/03-dict/): dict с основ: как создать словарь, прочитать значение по ключу, добавить, обновить и удалить, get со значением по умолчанию, перебор через keys/values/items и список словарей — структура, которая представляет записи и JSON. - [Срезы, изменяемые и неизменяемые типы, is и ==](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/04-slicing-mutability-identity/): Нарезка последовательностей срезами [start:stop:step]; разница между типами, которые можно изменить, и типами, которые нельзя; что происходит, когда две переменные указывают на один список; и разница между равенством значений (==) и идентичностью объектов (is). - [Функции подробно: значения по умолчанию, функции как объекты, *args, **kwargs и lambda](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/05-functions-args-kwargs-lambda/): Упорядоченное повторение функций, параметры со значением по умолчанию и именованные аргументы, функция как объект, который можно передавать, функции с переменным числом аргументов (*args, **kwargs) и lambda на вводном уровне. - [Область видимости: Local, Enclosing, Global и Built-in (LEGB)](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/06-scope-legb/): Где «живёт» переменная и откуда её видно: локальные переменные внутри функции, глобальные переменные, функция внутри функции (Enclosing), встроенные имена и порядок поиска LEGB — включая global и почему его лучше избегать. - [Чистые функции и побочные эффекты](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/07-pure-functions/): Что такое чистая функция, что считается побочным эффектом (Side Effect), почему функция, которая меняет полученный список, — ловушка, и как написать чистую версию, которая возвращает новое значение. - [Функции высшего порядка: функции, которые получают и возвращают функции](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/08-higher-order-functions/): Функция, которая получает функцию как параметр или возвращает функцию: передача действия как параметра, map, filter, параметр key в sorted/max/min и функция, которая создаёт функции. - [Вложенные функции, замыкания и nonlocal](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/09-nested-functions-nonlocal/): Функция внутри функции, буква E в LEGB (Enclosing), замыкание (Closure) — функция, которая помнит переменные создавшей её функции, и nonlocal для изменения переменной объемлющей функции. - [Декораторы: добавляем поведение функции, не трогая её](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/10-decorators/): Что такое декоратор (Decorator), как он строится из функций высшего порядка и замыканий, синтаксис @, обёртка, подходящая для любой функции, с *args и **kwargs, и полезные примеры: печать вызовов и измерение времени. ### Модули, файлы и JSON > Разделение кода на модули и пакеты, работа с текстовыми файлами и with, сохранение и чтение данных в формате JSON. - [Модули: зачем делить код на файлы, import, from и as](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-modules-files/01-modules-and-import/): Что такое модуль (Module), зачем проект делят на несколько файлов, как импортировать код из другого файла с помощью import, from и as и что происходит за кулисами при импорте. - [Пакеты, __init__.py и if __name__ == "__main__"](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-modules-files/02-packages-and-main-guard/): Как организовать модули в папки (Package), какова роль __init__.py, как импортировать изнутри пакета и что означает условие if __name__ == '__main__' — и почему оно нужно каждому файлу, который предназначен для запуска. - [Работа с текстовыми файлами: open, with, чтение и запись](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-modules-files/03-text-files-with/): Как открыть файл, режимы открытия (r, w, a), почему файл нужно закрывать и как with делает это за нас, способы чтения (read, readlines, цикл) и записи (write), и как построить путь, который не зависит от папки, из которой выполняется запуск. - [JSON: чтение, запись и сохранение данных](https://intro-kodkod-6.nm-ambition.com/ru/docs/python-modules-files/04-json/): Что такое JSON и почему это самый распространённый формат для сохранения и передачи данных, соответствие между JSON и dict и list в Python, а также сохранение и загрузка данных с помощью json.dump, json.load, json.dumps и json.loads. ### ООП – объектно-ориентированное программирование > Классы и объекты, состояние, инкапсуляция и property, наследование и полиморфизм, проектирование в ООП — от задачи до готовой системы. - [Классы и объекты: от проблемы к полноценному классу](https://intro-kodkod-6.nm-ambition.com/ru/docs/oop/01-classes-and-objects/): Один урок, который разворачивается как история: маленькая банковская система, которая ломается без ООП, затем Class и Object, __init__ и self, методы и атрибуты класса — а в конце мы возвращаемся в банк и строим его заново, плюс мини-проект, который всё связывает. - [Объекты в работе: состояние, сокрытие данных, свойства и полноценный класс](https://intro-kodkod-6.nm-ambition.com/ru/docs/oop/02-objects-in-practice/): Один урок, который разворачивается как история: много объектов и меняющееся состояние, затем мы обнаруживаем, что любой код может испортить данные, — скрываем их (инкапсуляция), сохраняем простой синтаксис с @property, который проверяет каждое присваивание, и строим полноценный класс с правилами. В конце — мини-проект, который всё связывает. - [Наследование и super: похожие классы без дублирования кода](https://intro-kodkod-6.nm-ambition.com/ru/docs/oop/03-inheritance/): Один урок, который разворачивается как история: сотрудник и менеджер с одним и тем же кодом дважды — наследование решает это; затем дочерний класс, который должен вести себя немного иначе, — переопределение (Override) и super(). В конце — мини-проект, который всё связывает. - [Полиморфизм: общий интерфейс, разное поведение](https://intro-kodkod-6.nm-ambition.com/ru/docs/oop/04-polymorphism/): Что означает полиморфизм (Polymorphism), почему он полезен — один кусок кода, который работает со многими типами без if, — общий интерфейс через родительский класс, утиная типизация (Duck Typing) в Python и как это делает систему легко расширяемой. - [Единственная ответственность в ООП и композиция против наследования](https://intro-kodkod-6.nm-ambition.com/ru/docs/oop/05-srp-and-composition/): Как разбить «божественный класс» (God Class) на классы с единственной ответственностью, что такое композиция (Composition, «имеет» — объект, составленный из других объектов) и как выбирать между композицией и наследованием, — на вводном уровне. - [Практика с сопровождением: от словесного требования к структуре классов](https://intro-kodkod-6.nm-ambition.com/ru/docs/oop/06-from-requirements-to-classes/): Полный мастер-класс по проектированию шаг за шагом: мы получаем требование для системы спортзала, анализируем его, решаем, какие будут классы и ответственности, рисуем отношения, пишем скелет, реализуем и тестируем — процесс, который можно повторить в каждом проекте. ### Бэкенд и FastAPI > Что такое бэкенд, HTTP-методы и коды состояния, path/query/body, создание первого сервера на FastAPI и middleware, которое выполняется при каждом запросе. - [Бэкенд и HTTP: кто что делает, методы и коды состояния](https://intro-kodkod-6.nm-ambition.com/ru/docs/backend-fastapi/01-what-is-backend/): Роль бэкенда — как клиент, сервер и база данных работают вместе и что такое API и Endpoint — и как с ним общаться: GET, POST, PUT и DELETE и их связь с CRUD, а также базовые коды ответа, которые возвращает любой бэкенд. - [FastAPI с нуля: установка, app = FastAPI(), первый маршрут и запуск сервера](https://intro-kodkod-6.nm-ambition.com/ru/docs/backend-fastapi/04-fastapi-setup-first-route/): Пошаговая настройка первого сервера FastAPI: виртуальное окружение (venv), установка через pip, создание main.py, импорт FastAPI, создание app, определение первого маршрута с декоратором, запуск через uvicorn и автоматическая страница документации /docs. - [Параметры пути, параметры запроса и тело](https://intro-kodkod-6.nm-ambition.com/ru/docs/backend-fastapi/03-params-query-body/): Три способа, которыми клиент передаёт информацию серверу: параметр в пути (/students/7), параметры в строке запроса (?city=Haifa&limit=10) и тело (Body) в JSON — когда использовать каждый и как они выглядят в настоящем запросе. - [FastAPI: параметры пути, строка запроса, тело и HTTPException](https://intro-kodkod-6.nm-ambition.com/ru/docs/backend-fastapi/05-fastapi-params-query-body/): Как FastAPI читает три вида ввода: параметр пути с преобразованием типа, параметры запроса со значениями по умолчанию и необязательные параметры, а также тело, определённое моделью Pydantic, — включая подсказки типов (Type Hints), status_code=201, HTTPException для 404 и автоматическую ошибку 422. - [Middleware: код, который выполняется при каждом запросе](https://intro-kodkod-6.nm-ambition.com/ru/docs/backend-fastapi/06-middleware/): Что такое Middleware в FastAPI: код, который оборачивает каждый запрос к серверу — до маршрута и после него. Лог для каждого запроса, измерение времени и заголовок для каждого ответа, async и await, и когда Middleware — неподходящее место. ### Базы данных и MySQL > Что такое база данных, MySQL в контейнере Docker с интерфейсом в VS Code, создание таблиц и запросов и полный набор операций CRUD из Python. - [База данных и установка MySQL: таблицы, ключи, Docker и драйвер](https://intro-kodkod-6.nm-ambition.com/ru/docs/databases/01-what-is-a-database/): Зачем нужна база данных, когда есть файлы JSON, и что такое таблица, строка, столбец, первичный ключ, типы и ограничения, — а также как поднять сервер MySQL в контейнере Docker, подключиться к нему из VS Code через Database Client и из Python через драйвер. - [Подключение, таблица и вставка данных: Connection, CREATE TABLE и INSERT](https://intro-kodkod-6.nm-ambition.com/ru/docs/databases/03-open-test-close-connection/): Мы открываем соединение с MySQL, проверяем, что оно работает, и правильно закрываем его с try/finally, — а затем создаём таблицу с типами и ограничениями, вставляем данные из Python и видим, как база отказывается принимать данные, нарушающие правила. - [Базовый SQL: SELECT, WHERE по id и простая фильтрация](https://intro-kodkod-6.nm-ambition.com/ru/docs/databases/02-select-where/): Чтение данных из таблицы: SELECT всех строк или выбранных столбцов, WHERE по id, чтобы получить одну запись, простые условия (=, >, AND), ORDER BY для сортировки и что возвращает запрос, который ничего не нашёл. - [Запрос из Python: execute, параметры, commit и fetch](https://intro-kodkod-6.nm-ambition.com/ru/docs/databases/03-queries-from-python/): Полный путь Python → Connection → Query → Database → Result → Python: выполнение CREATE, INSERT и SELECT через execute, параметры через %s (и почему нельзя строить SQL конкатенацией — SQL Injection), commit для сохранения, lastrowid и fetchone/fetchall. - [Обновление и удаление: UPDATE и DELETE по id — из SQL и из Python](https://intro-kodkod-6.nm-ambition.com/ru/docs/databases/01-update/): Обновление записи и удаление записи по id — и в SQL, и из Python с параметрами: почему WHERE обязателен, как узнать с помощью rowcount, действительно ли что-то изменилось, и что происходит с удалённым id. - [Полный CRUD из Python: законченный модуль db.py и проверка всех четырёх действий](https://intro-kodkod-6.nm-ambition.com/ru/docs/databases/04-full-crud-module/): Соединяем всё изученное в один законченный модуль доступа к базе данных — init_db, create, get_all, get, update и delete — с параметрами, commit, rowcount, переводом ошибок и словарями, и проверочный скрипт, который выполняет все четыре действия CRUD над одной сущностью. ### Students API – сервер с базой данных > Подключение маршрутов к базе данных, Students API с полным CRUD и тестирование через Swagger. - [Связываем маршруты с действиями в базе данных: архитектура](https://intro-kodkod-6.nm-ambition.com/ru/docs/students-api/01-connecting-routes-to-db/): Как соединить FastAPI с db.py: отделение маршрута от кода доступа к базе, таблица соответствий POST→INSERT, GET→SELECT, PUT→UPDATE, DELETE→DELETE, что происходит в одном запросе от начала до конца и запуск первых двух Endpoint-ов — GET всех и GET по id. - [API студентов — полный CRUD: POST, GET, PUT и DELETE над базой данных](https://intro-kodkod-6.nm-ambition.com/ru/docs/students-api/02-students-api-full-crud/): Завершаем сервер: модель Pydantic для ввода, общая функция проверки, POST, который создаёт и возвращает 201, PUT, который обновляет с 404 и 409, DELETE, который возвращает 204, — полный код main.py и все его настоящие ответы. - [Проверка системы: Swagger UI, curl и проверочный скрипт на Python](https://intro-kodkod-6.nm-ambition.com/ru/docs/students-api/03-testing-with-swagger/): Три способа проверить API — Swagger UI по адресу /docs (Try it out), curl из терминала и скрипт на Python, который выполняет последовательность запросов и сравнивает их с ожидаемыми кодами, — и упорядоченный список ручных проверок для всех действий CRUD.