Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lexxai/goit_python_web_hw_13
GoIT, Python WEB, Homework number 13. FastAPI. PostgreSQL. Docker. REST API. ORM SQLAlchemy. Pydantic. Bootstraps CSS. Jinga. Alembic. OAuth2. JWT. Redis. Cloudinary. Limits
https://github.com/lexxai/goit_python_web_hw_13
cloduinary docker docker-compose fastapi fastapi-sqlalchemy goit homwork jinja2 oauth2 postgresql pydantic python redis rest-api
Last synced: 5 days ago
JSON representation
GoIT, Python WEB, Homework number 13. FastAPI. PostgreSQL. Docker. REST API. ORM SQLAlchemy. Pydantic. Bootstraps CSS. Jinga. Alembic. OAuth2. JWT. Redis. Cloudinary. Limits
- Host: GitHub
- URL: https://github.com/lexxai/goit_python_web_hw_13
- Owner: lexxai
- License: mit
- Created: 2023-11-20T02:20:54.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-22T00:10:26.000Z (about 1 year ago)
- Last Synced: 2024-11-24T06:13:42.649Z (2 months ago)
- Topics: cloduinary, docker, docker-compose, fastapi, fastapi-sqlalchemy, goit, homwork, jinja2, oauth2, postgresql, pydantic, python, redis, rest-api
- Language: Python
- Homepage:
- Size: 4.09 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# goit_python_web_hw_13
GoIT, Python WEB, Homework number 12. FastAPI. PostgreSQL. Docker. REST API. ORM SQLAlchemy. Pydantic. Bootstraps CSS. Jinga. Alembic. OAuth2. JWT. Redis. Cloudinary. Limits# Домашнє завдання №13
## Перша частинаУ цьому домашньому завданні ми продовжуємо доопрацьовувати застосунок REST API із домашнього завдання 12.
### Завдання
1.1. Реалізуйте механізм верифікації електронної пошти зареєстрованого користувача;
1.2. Обмежуйте кількість запитів до своїх маршрутів контактів. Обов’язково обмежте швидкість - створення контактів для користувача;
1.3. Увімкніть CORS для свого REST API;
1.4. Реалізуйте можливість оновлення аватара користувача. Використовуйте сервіс Cloudinary;
#### Загальні вимоги
- Усі змінні середовища повинні зберігатися у файлі .env. Всередині коду не повинно бути конфіденційних даних у «чистому» вигляді;
- Для запуску всіх сервісів і баз даних у застосунку використовується Docker Compose;#### Додаткове завдання
1.5. Реалізуйте механізм кешування за допомогою бази даних Redis. Виконайте кешування поточного користувача під час авторизації;
1.6. Реалізуйте механізм скидання пароля для застосунку REST API;
## Друга частина
У цьому домашньому завданні необхідно доопрацювати застосунок Django із домашнього завдання 10.
## Завдання
2.1. Реалізуйте механізм скидання пароля для зареєстрованого користувача;
2.2. Усі змінні середовища повинні зберігатися у файлі .env та використовуватися у файлі settings.py
# Результати виконання завдань
## Встановлення та запуск
### Підготувати зміні оточення .env
На основі прикладів у теці [doc\dot-env-example](doc\dot-env-example) створити файли з Вашими індивідуальними даними:
- .env (визначає APP_ENV що визначає поточний робочий файл є prod, dev)
- .env-dev (Налаштування для dev)
- .env-prod (Налаштування для prod)
### Режим Docker prod
#### Docker app compose
Виконати скрипт:
```
cd .\scripts
docker_run_docker-compose.cmd
```
або
```
docker-compose --env-file .env-prod up -d
```
![](doc/docker-app-02.png)
![](doc/docker-app-01.png)
![](doc/healthcheck-01.png)#### Docker Hub url: https://hub.docker.com/r/lexxai/web_hw13
### Режим dev
#### Бази даних Docker compose
Виконати скрипт:
```
cd .\scripts
docker_run_db_compose.cmd
```
або
```
docker compose --env-file .env-prod --file docker-compose-db.yml up -d
cd .\hw13
alembic upgrade head
```#### FastAPI server
Виконати скрипт:
```
cd .\scripts
runserver.cmd
```
або
```
cd .\hw13
uvicorn main:app --reload --port 9000
```
або
```
cd .\hw13
python .\main.py
```### Відкрити сторінку браузера http://localhost:9000
![](doc/index-01.png)
FastAPI - Swagger UI
![](doc/index-02.png)
JavaScript easy client
![](doc/index-03.png)## Етапи виконання
## 1.1. Реалізуйте механізм верифікації електронної пошти зареєстрованого користувача
Реєстрація
![](doc/auth-emailconf-01.png)Спроба зайти, без підтвердження пошти
![](doc/auth-emailconf-05.png)Лист підтвердження
![](doc/auth-emailconf-02.png)Підтвердження за клац на посилання з листа
![](doc/auth-emailconf-03.png)Зміна у базі даних
![](doc/auth-emailconf-04.png)Спроба зайти, після підтвердження пошти
![](doc/auth-emailconf-06.png)## 1.2.
### Обмежуйте кількість запитів до своїх маршрутів контактів.
Postman
![](doc/limit-contacts-01.png)### Обмеження швидкісті - створення контактів для користувача
Postman
![](doc/limit-create-02.png)seed script
![](doc/limit-create-01.png)## 1.3. CORS
CORS ORIGIN ALLOW http://localhost:3001
![](doc/cors-03.png)CORS ORIGIN DENY FOR http://localhost:3002
![](doc/cors-01.png)CORS ORIGIN DENY FOR http://localhost:3002
![](doc/cors-02.png)CORS ORIGIN ALLOW http://localhost:3002
![](doc/cors-04.png)CORS ORIGIN ALLOWED FOR http://localhost:3002
![](doc/cors-05.png)## 1.4. Avatar Cloudinary
Default Gravatar link
![](doc/avatar-01.png)Upload new avatar to Cloudinary
![](doc/avatar-02.png)Download link of avatar from Cloudinary
![](doc/avatar-03.png)Updated link of avatar from Cloudinary on user profile
![](doc/avatar-04.png)## 1.5. Механізм кешування за допомогою бази даних Redis. Кешування поточного користувача під час авторизації.
![](doc/user-redis-01.png)## 2. Django із домашнього завдання 10
Проєкт виконано за цим посиланням:
https://github.com/lexxai/goit_python_web_hw_10/tree/addon-hw13
(prepend) Django - https://github.com/lexxai/goit_python_web_django_lect_02_notes/tree/reset_password
## 2.1 Django HW10
### PASSWORD RESET
![](doc/hw10/password-reset-06.png)![](doc/hw10/password-reset-05.png)
![](doc/hw10/password-reset-01.png)
![](doc/hw10/password-reset-02.png)
![](doc/hw10/password-reset-03.png)
![](doc/hw10/password-reset-04.png)