Skip to content

Commit b17e477

Browse files
committed
add end-points to readme
1 parent b4fef1e commit b17e477

1 file changed

Lines changed: 90 additions & 4 deletions

File tree

README.md

Lines changed: 90 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,105 @@
11
# Title
2+
23
Данный шаблон был разработан для одной цели - облегчения и повышения качества
34
выполненых тестовых заданий в рамках **FastAPI**.
45

56
# Quick start
7+
68
Для тех кто уже знаком с реализацией и всеми деталями - могут приступить к установке.
9+
710
## Enviroments
11+
812
Необходимо заполнить **.env.sample** и в последствии перемеиновать его в **.env**
13+
914
```python
1015
# .env.sample
1116
POSTGRES_PASSWORD=password # Пароль от базы данных (Настройка)
1217
DB_PASSWORD=password # Пароль от базы данных (Использование)
1318
TEST_POSTGRES_PASSWORD=password # Пароль от тестовой базы данный (Настройка)
1419
TEST_DB_PASSWORD=password # Пароль от тестовой базы данных (Использование)
1520
```
21+
1622
## Docker
23+
1724
Шаблон находится под системой управления и контеризации - **Docker**.
1825
Если у вас нет Docker - вы можете установить его с официального сайта: [Docker](https://www.docker.com/get-started/)
26+
1927
- Вам необходимо сделать "Билд"
28+
2029
```bash
2130
docker compose build
2231
```
32+
2333
- Вам необходимо запустить окружение
34+
2435
```bash
2536
docker compose up
2637
```
27-
- После успешного запуска приложение будет доступно по адрессу: http://localhost:8080
28-
- Grafana: http://localhost:3000
29-
- Flower: http://localhost:5555
38+
39+
- После успешного запуска приложение будет доступно по адрессу: <http://localhost:8080>
40+
- Grafana: <http://localhost:3000>
41+
- Flower: <http://localhost:5555>
3042

3143
# View
44+
3245
Обзор и детали данного шаблона
46+
47+
## Users
48+
49+
В данном шаблоне реализован CRUD для пользователя с помощью библиотеки
50+
fastapi-users
51+
52+
### End-points
53+
54+
`USERS`
55+
56+
- <http://localhost:8080/api/v1/users/me> GET
57+
Получение текущего пользователя
58+
- <http://localhost:8080/api/v1/users/me> PATCH
59+
Изменение текущего пользователя
60+
- <http://localhost:8080/api/v1/users/{id}> GET
61+
Получение пользователя по ID Необходимо иметь права доступа уровня `admin`
62+
- <http://localhost:8080/api/v1/users/{id}> PATCH
63+
Изменение пользоватея по ID Необходимо иметь права доступа уровня `admin`
64+
- <http://localhost:8080/api/v1/users/{id}> DELETE
65+
Удаление пользоватея по ID Необходимо иметь права доступа уровня `admin`
66+
67+
`AUTH`
68+
69+
- <http://localhost:8080/api/v1/auth/jwt/login> POST
70+
Аутентификация в систему с последующим получением JWT для авторизации
71+
- <http://localhost:8080/api/v1/auth/jwt/logout> POST
72+
Вызод из системы
73+
- <http://localhost:8080/api/v1/auth/register> POST
74+
Регистрация нового пользователя
75+
- <http://localhost:8080/api/v1/auth/request-verify-token> POST
76+
Получение токена для верификации. `ВАЖНО` Читайте ниже, есть нюанс.
77+
- <http://localhost:8080/api/v1/auth/verify> POST
78+
Верификация пользователя по токену
79+
- <http://localhost:8080/api/v1/auth/forgot-password> POST
80+
Получение токена для изменения пароль. `ВАЖНО` Читайте ниже, есть нюанс.
81+
- <http://localhost:8080/api/v1/auth/reset-password> POST
82+
Изменения пароля посредством токена
83+
84+
`ВАЖНО`
85+
86+
- <http://localhost:8080/api/v1/auth/forgot-password> POST
87+
Должен осуществлять логику отправки токена по эмеилу либо другим способом.
88+
В данный момент отправка осуществляется через `консоль`.
89+
Для деталей смотрите миксин `api_v1/users/mixins/ActionUserManagerMixin`
90+
- <http://localhost:8080/api/v1/auth/forgot-password> POST
91+
Должен осуществлять логику отправки токена по эмеилу либо другим способом.
92+
В данный момент отправка осуществляется через `консоль`.
93+
Для деталей смотрите миксин `api_v1/users/mixins/ActionUserManagerMixin`
94+
3395
## Найболее используемые
96+
3497
Найболее используемые конструкции с которыми приходится часто взаимодействовать.
98+
3599
### Registration Routers
100+
36101
- В каждом приложений необходимо инициализировать router
102+
37103
```python
38104
# api/users/views.py
39105
from fastapi import APIRouter
@@ -44,7 +110,9 @@ router = APIRouter(
44110
tags=['Users'],
45111
)
46112
```
113+
47114
- Затем зарегистрировать роутер
115+
48116
```python
49117
# api_v1/routers.py
50118
from api_v1.users.views import router as users
@@ -58,11 +126,14 @@ def register_routers(app: FastAPI) -> None:
58126
prefix=settings.API_PREFIX,
59127
)
60128
```
129+
61130
После регистрации данные маршруты будут доступны.
62131

63132
### Registration Logs
133+
64134
- Логи захватывают все исключения возникшие в системе
65135
и с помошью диспечиризации распределяется по нужным **file.log**
136+
66137
```python
67138
# app_includes/logs_errors.py
68139
from fastapi import FastAPI
@@ -86,7 +157,9 @@ def register_errors(app: FastAPI) -> None:
86157
)
87158
return JSONResponse(response)
88159
```
160+
89161
- Если вы пишете пользовательское исключение например:
162+
90163
```python
91164
from starlette.exceptions import HTTPException
92165

@@ -95,11 +168,14 @@ class ValidationError(HTTPException):
95168

96169
pass
97170
```
171+
98172
То вам нужно его зарегистрировать как было показанно выше,
99173
иначе logs не смогут выявить данное исключение и данные будут утеряны.
100174

101175
### Registration Middlaware
176+
102177
- Для регистрации Middlaware вам нужно добавить его в функцию
178+
103179
```python
104180
from fastapi.middleware.cors import CORSMiddleware
105181
from fastapi import FastAPI
@@ -119,10 +195,13 @@ def register_middlewares(app: FastAPI) -> None:
119195
allow_headers=['*'],
120196
)
121197
```
198+
122199
- При появлении новых middleware добавляйте их по порядку в эту функцию
123200

124201
### Celery
202+
125203
- Для регистрации task вам нужно создать файл с именем **tasks.py** в вашем приложении:
204+
126205
```python
127206
# api_v1/users/tasks.py
128207
from config import celery_app
@@ -137,7 +216,9 @@ async def time_sleep_task():
137216
await asyncio.sleep(2.0)
138217
return 'Task is done'
139218
```
219+
140220
- Затем добавить этот файл в список пакетов Celery
221+
141222
```python
142223
# confin.celery.connection.py
143224

@@ -146,14 +227,17 @@ app.conf.broker_url = settings.rabbit.broker_url
146227
# Регистрация до окружения где находится tasks.py
147228
app.autodiscover_tasks(packages=['api_v1.users'])
148229
```
230+
149231
- После этих действий ваша task будет зарегистрирована
150232

151233
### Test
234+
152235
- Для тестирования у вас есть тестовая база данных, а так же
153236
уже инициализированный отдельный клиент.
154237
Cпособ реализации в **api_v1/tests/conftest.py**
155238
- Что бы написать тестовую функцию которой нужен доступ к API,
156239
вам нужно использовать fixture - client.
240+
157241
> [!NOTE]
158242
> Для асинхронных тестов используйте **@pytest.mark.asyncio**
159243
@@ -169,7 +253,9 @@ async def test_get_user_error(client: AsyncClient):
169253
)
170254
assert response.status_code == 400
171255
```
256+
172257
- Для запуска используйте команду
258+
173259
```bash
174260
pytest
175-
```
261+
```

0 commit comments

Comments
 (0)