Лабораторная работа 1. Реализация серверного приложения FastAPI
Для выполнения лабораторной и всех практических работ рекомендуется использовать версию Python 3.10+
Цели
Научится реализовывать полноценное серверное приложение с помощью фреймворка FastAPI с применением дополнительных средств и библиотек.
Выбор темы
Выбрать одну на выбор:
Разработка программы-тайм-менеджера
Разработайте простую программу-тайм-менеджер, которая поможет управлять вашим временем и задачами. Программа должна позволять создавать задачи с описанием, устанавливать им сроки выполнения и приоритеты, а также отслеживать затраченное время на каждую задачу.
Дополнительные функции могут включать в себя уведомления о приближении к дедлайнам, возможность создания ежедневного расписания работы и анализ времени, затраченного на различные задачи.
Создание системы для проведения хакатонов
Pадача состоит в разработке программной системы, которая будет использоваться для организации и проведения хакатонов. Хакатон - это соревнование, на котором участники, как правило, программисты, дизайнеры и бизнес-специалисты, работают над проектами в течение определенного времени, решая поставленные задачи или разрабатывая новые идеи. Система должна предоставлять следующий функционал:
-
Регистрация участников: Участники должны иметь возможность зарегистрироваться на хакатон, указав свои данные (имя, адрес электронной почты, контактный номер и т. д.). После регистрации участники должны получить подтверждение от организаторов.
-
Формирование команд: Участники должны иметь возможность создавать команды или присоединяться к уже существующим. Команды могут состоять из участников с различными навыками (программирование, дизайн, маркетинг и т. д.).
-
Публикация задач: Организаторы хакатона должны иметь возможность публиковать задачи или проекты, над которыми будут работать участники. Каждая задача должна содержать описание, требования и критерии оценки.
-
Оценка работ: Участники должны иметь возможность загружать свои работы и прототипы для оценки.
Разработка сервиса для управления личными финансами
Необходиом создать простой сервис для управления личными финансами. Сервис должен позволять пользователям вводить доходы и расходы, устанавливать бюджеты на различные категории, а также просматривать отчеты о своих финансах. Дополнительные функции могут включать в себя возможность получения уведомлений о превышении бюджета, анализа трат и установки целей на будущее.
Разработка платформы для поиска людей в команду.
Задача - создать веб-платформу, которая поможет людям находить партнеров для совместной работы над проектами. Платформа должна предоставлять возможность пользователям создавать профили, описывать свои навыки, опыт и интересы, а также искать других участников и команды для участия в проектах.
-
Создание профилей: Возможность пользователям создавать профили, указывать информацию о себе, своих навыках, опыте работы и предпочтениях по проектам.
-
Поиск и фильтрация профилей: Реализация функционала поиска пользователей и команд на основе заданных критериев, таких как навыки, опыт, интересы и т.д.
-
Создание и просмотр проектов: Возможность пользователям создавать проекты и описывать их цели, требования и ожидаемые результаты. Возможность просмотра доступных проектов и их участников.
-
Управление командами и проектами: Возможность участникам создавать команды для совместной работы над проектами и управления участниками. Функционал для управления проектами, включая установку сроков, назначение задач, отслеживание прогресса и т.д.
Разработка веб-приложения для буккросинга
Ваша задача - создать веб-приложение, которое позволит пользователям обмениваться книгами между собой. Это приложение должно облегчать процесс обмена книгами, позволяя пользователям находить книги, которые им интересны, и находить новых пользователей для обмена книгами. Функционал веб-приложения должен включать следующее:
-
Создание профилей: Возможность пользователям создавать профили, указывать информацию о себе, своих навыках, опыте работы и предпочтениях по проектам.
-
Добавление книг в библиотеку: Пользователи могут добавлять книги, которыми они готовы поделиться, в свою виртуальную библиотеку на платформе.
-
Поиск и запросы на обмен: Функционал поиска книг в библиотеке других пользователей. Возможность отправлять запросы на обмен книгами другим пользователям.
-
Управление запросами и обменами: Возможность просмотра и управления запросами на обмен. Возможность подтверждения или отклонения запросов на обмен.
Разработка веб-приложения для поиска партнеров в путешествие.
Задача - создать веб-приложение, которое поможет людям находить партнеров для совместных путешествий. Приложение должно предоставлять возможность пользователям находить попутчиков для конкретных путешествий, обмениваться информацией о планируемых поездках и обсуждать детали маршрута. Функционал веб-приложения должен включать следующее:
-
Создание профилей: Возможность пользователям создавать профили, указывать информацию о себе, своих навыках, опыте работы и предпочтениях по проектам.
-
Создание поездок: Возможность пользователям создавать объявления о планируемых поездках с указанием дат, маршрута, предполагаемой длительности и других деталей.
-
Поиск попутчиков: Функционал поиска попутчиков для конкретных поездок на основе заданных критериев, таких как место отправления, место назначения, даты и т.д.
-
Управление поездками: Возможность управления созданными поездками, включая добавление/изменение деталей, отмену поездки и т.д.
Критерии модели данных:
- 5 или больше таблиц
- Связи many-to-many и one-to-many
- Ассоциативная сущность должна иметь поле, характеризующее связь, помимо ссылок на связанные таблицы
Задание
-
Выполнить практики 1.1-1.3. Их можно реализовать на примере, приведенном в текстах практик или используя выбранную тему. Обратите внимания на задания в конце практик - они должны входить в реализацию ЛР. Практики можно предоставить в любом из ниже приведенных вариантов:
- Каждая практика - отдельная папка в репозитории.
- Каждая практика - отдельная ветка в репозитории.
- Каждая практика - отдельный коммит в репозитории.
-
Задание на 9 Баллов: Реализовать на основании выбранной модели с помощью инструкций из практик серверное приложение на FastAPI. Оно должно включать в себя:
- Таблицы, реализованные с помощью ORM SQLAlchemy или SQLModel с использованием БД PostgreSQL.
- API, содержащее CRUD-ы. Там где это необходимо, реализовать GET-запросы возвращающие модели с вложенными объектами (связи many-to-many и one-to-many).
- Настроенную систему миграций с помощью библиотеки Alembic.
- Аннотацию типов в передаваемых и возвращаемых значениях в API-методах.
- Оформленную файловую структуру проекта с разделением кода, отвечающего за разную бизнес-логику и предметную область, на отдельные файлы и папки.
- (опционально) Комментарии к сложным частям кода.
-
Задание на 15 Баллов (можно реализовывать сразу): Необходимо реализовать функционал пользователя в разрабатываемом приложении. Функционал включает в себя:
- Авторизацию и регистрацию
- Генерацию JWT-токенов
- Аутентификацию по JWT-токену
- Хэширование паролей
- Дополнительные АПИ-методы для получения информации о пользователе, списка пользователей и смене пароля
Замечание
Пожалуйста, реализуйте п.3 вручную, без использования сторонних библиотек (хэширование и создание JWT не в счет). В противном случае задание не будет оценено.
Пример реализации задания: FastAPI with SQLModel, Alembic and Authentication. Full Course
Отчет
Предоставляется в формате github-pages. Отчет по лабораторной должен содержать все реализованные эндпоинты, модели и код соединения с БД. В отчете можно указать исключительно финальную версию кода. Отчет должен содержать ссылки на github c папками, коммитами или ветками выполненных практик.