Skip to content

Лабораторная работа 1. Реализация серверного приложения FastAPI

Для выполнения лабораторной и всех практических работ рекомендуется использовать версию Python 3.10+

Цели

Научится реализовывать полноценное серверное приложение с помощью фреймворка FastAPI с применением дополнительных средств и библиотек.

Выбор темы

Выбрать одну на выбор:

Разработка программы-тайм-менеджера

Разработайте простую программу-тайм-менеджер, которая поможет управлять вашим временем и задачами. Программа должна позволять создавать задачи с описанием, устанавливать им сроки выполнения и приоритеты, а также отслеживать затраченное время на каждую задачу.

Дополнительные функции могут включать в себя уведомления о приближении к дедлайнам, возможность создания ежедневного расписания работы и анализ времени, затраченного на различные задачи.

Создание системы для проведения хакатонов

Pадача состоит в разработке программной системы, которая будет использоваться для организации и проведения хакатонов. Хакатон - это соревнование, на котором участники, как правило, программисты, дизайнеры и бизнес-специалисты, работают над проектами в течение определенного времени, решая поставленные задачи или разрабатывая новые идеи. Система должна предоставлять следующий функционал:

  • Регистрация участников: Участники должны иметь возможность зарегистрироваться на хакатон, указав свои данные (имя, адрес электронной почты, контактный номер и т. д.). После регистрации участники должны получить подтверждение от организаторов.

  • Формирование команд: Участники должны иметь возможность создавать команды или присоединяться к уже существующим. Команды могут состоять из участников с различными навыками (программирование, дизайн, маркетинг и т. д.).

  • Публикация задач: Организаторы хакатона должны иметь возможность публиковать задачи или проекты, над которыми будут работать участники. Каждая задача должна содержать описание, требования и критерии оценки.

  • Оценка работ: Участники должны иметь возможность загружать свои работы и прототипы для оценки.

Разработка сервиса для управления личными финансами

Необходиом создать простой сервис для управления личными финансами. Сервис должен позволять пользователям вводить доходы и расходы, устанавливать бюджеты на различные категории, а также просматривать отчеты о своих финансах. Дополнительные функции могут включать в себя возможность получения уведомлений о превышении бюджета, анализа трат и установки целей на будущее.

Разработка платформы для поиска людей в команду.

Задача - создать веб-платформу, которая поможет людям находить партнеров для совместной работы над проектами. Платформа должна предоставлять возможность пользователям создавать профили, описывать свои навыки, опыт и интересы, а также искать других участников и команды для участия в проектах.

  • Создание профилей: Возможность пользователям создавать профили, указывать информацию о себе, своих навыках, опыте работы и предпочтениях по проектам.

  • Поиск и фильтрация профилей: Реализация функционала поиска пользователей и команд на основе заданных критериев, таких как навыки, опыт, интересы и т.д.

  • Создание и просмотр проектов: Возможность пользователям создавать проекты и описывать их цели, требования и ожидаемые результаты. Возможность просмотра доступных проектов и их участников.

  • Управление командами и проектами: Возможность участникам создавать команды для совместной работы над проектами и управления участниками. Функционал для управления проектами, включая установку сроков, назначение задач, отслеживание прогресса и т.д.

Разработка веб-приложения для буккросинга

Ваша задача - создать веб-приложение, которое позволит пользователям обмениваться книгами между собой. Это приложение должно облегчать процесс обмена книгами, позволяя пользователям находить книги, которые им интересны, и находить новых пользователей для обмена книгами. Функционал веб-приложения должен включать следующее:

  • Создание профилей: Возможность пользователям создавать профили, указывать информацию о себе, своих навыках, опыте работы и предпочтениях по проектам.

  • Добавление книг в библиотеку: Пользователи могут добавлять книги, которыми они готовы поделиться, в свою виртуальную библиотеку на платформе.

  • Поиск и запросы на обмен: Функционал поиска книг в библиотеке других пользователей. Возможность отправлять запросы на обмен книгами другим пользователям.

  • Управление запросами и обменами: Возможность просмотра и управления запросами на обмен. Возможность подтверждения или отклонения запросов на обмен.

Разработка веб-приложения для поиска партнеров в путешествие.

Задача - создать веб-приложение, которое поможет людям находить партнеров для совместных путешествий. Приложение должно предоставлять возможность пользователям находить попутчиков для конкретных путешествий, обмениваться информацией о планируемых поездках и обсуждать детали маршрута. Функционал веб-приложения должен включать следующее:

  • Создание профилей: Возможность пользователям создавать профили, указывать информацию о себе, своих навыках, опыте работы и предпочтениях по проектам.

  • Создание поездок: Возможность пользователям создавать объявления о планируемых поездках с указанием дат, маршрута, предполагаемой длительности и других деталей.

  • Поиск попутчиков: Функционал поиска попутчиков для конкретных поездок на основе заданных критериев, таких как место отправления, место назначения, даты и т.д.

  • Управление поездками: Возможность управления созданными поездками, включая добавление/изменение деталей, отмену поездки и т.д.

Критерии модели данных:

  1. 5 или больше таблиц
  2. Связи many-to-many и one-to-many
  3. Ассоциативная сущность должна иметь поле, характеризующее связь, помимо ссылок на связанные таблицы

Задание

  1. Выполнить практики 1.1-1.3. Их можно реализовать на примере, приведенном в текстах практик или используя выбранную тему. Обратите внимания на задания в конце практик - они должны входить в реализацию ЛР. Практики можно предоставить в любом из ниже приведенных вариантов:

    1. Каждая практика - отдельная папка в репозитории.
    2. Каждая практика - отдельная ветка в репозитории.
    3. Каждая практика - отдельный коммит в репозитории.
  2. Задание на 9 Баллов: Реализовать на основании выбранной модели с помощью инструкций из практик серверное приложение на FastAPI. Оно должно включать в себя:

    1. Таблицы, реализованные с помощью ORM SQLAlchemy или SQLModel с использованием БД PostgreSQL.
    2. API, содержащее CRUD-ы. Там где это необходимо, реализовать GET-запросы возвращающие модели с вложенными объектами (связи many-to-many и one-to-many).
    3. Настроенную систему миграций с помощью библиотеки Alembic.
    4. Аннотацию типов в передаваемых и возвращаемых значениях в API-методах.
    5. Оформленную файловую структуру проекта с разделением кода, отвечающего за разную бизнес-логику и предметную область, на отдельные файлы и папки.
    6. (опционально) Комментарии к сложным частям кода.
  3. Задание на 15 Баллов (можно реализовывать сразу): Необходимо реализовать функционал пользователя в разрабатываемом приложении. Функционал включает в себя:

    1. Авторизацию и регистрацию
    2. Генерацию JWT-токенов
    3. Аутентификацию по JWT-токену
    4. Хэширование паролей
    5. Дополнительные АПИ-методы для получения информации о пользователе, списка пользователей и смене пароля

Замечание

Пожалуйста, реализуйте п.3 вручную, без использования сторонних библиотек (хэширование и создание JWT не в счет). В противном случае задание не будет оценено.

Пример реализации задания: FastAPI with SQLModel, Alembic and Authentication. Full Course

Отчет

Предоставляется в формате github-pages. Отчет по лабораторной должен содержать все реализованные эндпоинты, модели и код соединения с БД. В отчете можно указать исключительно финальную версию кода. Отчет должен содержать ссылки на github c папками, коммитами или ветками выполненных практик.