Мой первый PET-проект, который я решил наполнить информацией о своих питомцах, используя современные технологии в backend разработке.
Моё веб-приложение несет исключительно информационный характер и может быть использовано Вами с той же целью.
Выбрал данный фреймворк по причине его асинхронности и скорости. Современные веб-приложения обслуживают тысячи клиентов и работают с огромными объёмами данных, поэтому будущее за асинхронными веб-приложениями.
SQLModel построен на базе SQLAlchemy и Pydantic что делает эту библиотеку невероятно мощным и современным инструментом в руках backend-разработчика. В данном проекте использовался ORM-подход и SQLite3 база данных.
Так как проект построен на чистом питоне, то вопрос о динамическом отображении контента решился очевидно. FastAPI решает этот вопрос путем внедрения Jinja2 шаблонов, генерирующих контент, загружаемый из БД.
В моем проекте Redis играет роль NoSQL-хранилища. В нем хранится весь контент, который вы можете видеть на html-страницах. Контент загружается, когда пользователь переходит по конечным точкам и АПИ обращается к redis-client, и вместе с Jinja2-шаблоном отправляет контекст с контентом.
В приложении полноценно функционирует защита на основе аутентификации/авторизации на основе протокола Oauth2 по паролю и токену типа Bearer (JWT-токен). Пользовательские пароли хешируеются и хранятся в виде хешей в SQLite3.
Разработка проекта велась преимущественно в ветке main. Хотя, внедрение некоторых технологий как, например, Pytest, велось в отдельной ветке. Стоит отметить, что такие файлы, как дампы Redis и SQLite3, а также .env и .venv в конечном коммите были проигнорированы по соображениям безопасности.
Все конечные точки были протестированы автотестами Pytest. Использовались продвинутые фишки типа фикстур, переопределение зависимостей (dependency-injection) и т.д.
Хотя проект хостится на VPS без контейнеризации (без Docker), была успешна проделана работа по развертыванию с Docker/Docker Compose. Docker-файлы и compose.yml работают исправно. При желании проект запросто можно запустить на VPS через Docker Compose (что также было протестировано).
Веб-сервер Nginx проксирует весь трафик, идущий через приложение. HTTPS протокол был достигнут благодаря certbot. На данный момент веб-приложение исправно функционирует и доступно по доменному имени, указанному выше.
Возможно, некоторые технологии я забыл упомянуть. Тем не менее, основную часть я вкратце описал. На последок упомяну, что, чтобы приложение заработало у вас исправно, вам необходимо активировать виртуальное окружение, установить зависимости и написать свой .env файл с именами переменных, прописанных в модуле config.py. Если развертываете без контейнеризации, не забудьте про настройку Redis и Nginx.