Skip to content

stoune2024/pet1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Мой PET-проект №1

Мой первый PET-проект, который я решил наполнить информацией о своих питомцах, используя современные технологии в backend разработке.

Моё веб-приложение несет исключительно информационный характер и может быть использовано Вами с той же целью.

Стек используемых технологий:

1. FastAPI - фреймворк;

Выбрал данный фреймворк по причине его асинхронности и скорости. Современные веб-приложения обслуживают тысячи клиентов и работают с огромными объёмами данных, поэтому будущее за асинхронными веб-приложениями.

2. SQLModel (SQLAlchemy + Pydantic);

SQLModel построен на базе SQLAlchemy и Pydantic что делает эту библиотеку невероятно мощным и современным инструментом в руках backend-разработчика. В данном проекте использовался ORM-подход и SQLite3 база данных.

3. Jinja2 - Динамические страницы;

Так как проект построен на чистом питоне, то вопрос о динамическом отображении контента решился очевидно. FastAPI решает этот вопрос путем внедрения Jinja2 шаблонов, генерирующих контент, загружаемый из БД.

4. Redis - NoSQL-хранилище;

В моем проекте Redis играет роль NoSQL-хранилища. В нем хранится весь контент, который вы можете видеть на html-страницах. Контент загружается, когда пользователь переходит по конечным точкам и АПИ обращается к redis-client, и вместе с Jinja2-шаблоном отправляет контекст с контентом.

5. Oauth2 протокол безопасности;

В приложении полноценно функционирует защита на основе аутентификации/авторизации на основе протокола Oauth2 по паролю и токену типа Bearer (JWT-токен). Пользовательские пароли хешируеются и хранятся в виде хешей в SQLite3.

6. Git;

Разработка проекта велась преимущественно в ветке main. Хотя, внедрение некоторых технологий как, например, Pytest, велось в отдельной ветке. Стоит отметить, что такие файлы, как дампы Redis и SQLite3, а также .env и .venv в конечном коммите были проигнорированы по соображениям безопасности.

7. Pytest;

Все конечные точки были протестированы автотестами Pytest. Использовались продвинутые фишки типа фикстур, переопределение зависимостей (dependency-injection) и т.д.

8. Docker/Docker Compose;

Хотя проект хостится на VPS без контейнеризации (без Docker), была успешна проделана работа по развертыванию с Docker/Docker Compose. Docker-файлы и compose.yml работают исправно. При желании проект запросто можно запустить на VPS через Docker Compose (что также было протестировано).

9. Nginx и HTTPS;

Веб-сервер Nginx проксирует весь трафик, идущий через приложение. HTTPS протокол был достигнут благодаря certbot. На данный момент веб-приложение исправно функционирует и доступно по доменному имени, указанному выше.

Заключение

Возможно, некоторые технологии я забыл упомянуть. Тем не менее, основную часть я вкратце описал. На последок упомяну, что, чтобы приложение заработало у вас исправно, вам необходимо активировать виртуальное окружение, установить зависимости и написать свой .env файл с именами переменных, прописанных в модуле config.py. Если развертываете без контейнеризации, не забудьте про настройку Redis и Nginx.