|
1 | | -<details> |
2 | | -<summary>Some text</summary> |
3 | | -Some text |
4 | | -</details> |
| 1 | +# Title |
| 2 | +Данный шаблон был разработан для одной цели - облегчения и повышения качества |
| 3 | +выполненых тестовых заданий в рамках **FastAPI**. |
| 4 | + |
| 5 | +# Quick start |
| 6 | +Для тех кто уже знаком с реализацией и всеми деталями - могут приступить к установке. |
| 7 | +## Enviroments |
| 8 | +Необходимо заполнить **.env.sample** и в последствии перемеиновать его в **.env** |
| 9 | +```python |
| 10 | +# .env.sample |
| 11 | +POSTGRES_PASSWORD=password # Пароль от базы данных (Настройка) |
| 12 | +DB_PASSWORD=password # Пароль от базы данных (Использование) |
| 13 | +TEST_POSTGRES_PASSWORD=password # Пароль от тестовой базы данный (Настройка) |
| 14 | +TEST_DB_PASSWORD=password # Пароль от тестовой базы данных (Использование) |
| 15 | +``` |
| 16 | +## Docker |
| 17 | +Шаблон находится под системой управления и контеризации - **Docker**. |
| 18 | +Если у вас нет Docker - вы можете установить его с официального сайта: [Docker](https://www.docker.com/get-started/) |
| 19 | +- Вам необходимо сделать "Билд" |
| 20 | +```bash |
| 21 | +docker compose build |
| 22 | +``` |
| 23 | +- Вам необходимо запустить окружение |
| 24 | +```bash |
| 25 | +docker compose up |
| 26 | +``` |
| 27 | +- После успешного запуска приложение будет доступно по адрессу: http://localhost:8080 |
| 28 | + |
| 29 | +# View |
| 30 | +Обзор и детали данного шаблона |
| 31 | +## Найболее используемые |
| 32 | +Найболее используемые конструкции с которыми приходится часто взаимодействовать. |
| 33 | +- registration routers |
| 34 | + - В каждом приложений необходимо инициализировать router |
| 35 | + ```python |
| 36 | + # api/users/views.py |
| 37 | + from fastapi import APIRouter |
| 38 | + |
| 39 | + |
| 40 | + router = APIRouter(prefix='/users', |
| 41 | + tags=['Users'], |
| 42 | + ) |
| 43 | + ``` |
| 44 | + - Затем зарегистрировать роутер |
| 45 | + ```python |
| 46 | + # api_v1/routers.py |
| 47 | + from api_v1.users.views import router as users |
| 48 | + |
| 49 | + |
| 50 | + # В этой функции нужно по порядку регистрировать routers |
| 51 | + def register_routers(app: FastAPI) -> None: |
| 52 | + app.include_router( |
| 53 | + router=users, |
| 54 | + prefix=settings.API_PREFIX, |
| 55 | + ) |
| 56 | + ``` |
| 57 | + После регистрации данные маршруты будут доступны. |
| 58 | +- registration logs |
| 59 | + - Логи захватывают все исключения возникшие в системе |
| 60 | + и с помошью дисперичизации распределяется по нужным **file.log** |
| 61 | + ```python |
| 62 | + # app_includes/logs_errors.py |
| 63 | + from fastapi import FastAPI |
| 64 | + from api_v1.exeptions import ValidationError |
| 65 | + |
| 66 | + |
| 67 | + # В данной функции регистрируются все исключения для захватывания Логами |
| 68 | + def register_errors(app: FastAPI) -> None: |
| 69 | + @app.exception_handler(ValidationError) |
| 70 | + async def validation_error_handler( |
| 71 | + request: Request, |
| 72 | + exc: ValidationError, |
| 73 | + ): |
| 74 | + logger.opt(exception=True).warning(exc) |
| 75 | + response = dict( |
| 76 | + status=False, |
| 77 | + error_code=exc.status_code, |
| 78 | + message=exc.detail, |
| 79 | + ) |
| 80 | + return JSONResponse(response) |
| 81 | + ``` |
| 82 | + - Если вы пишете пользовательское исключение например: |
| 83 | + ```python |
| 84 | + from starlette.exceptions import HTTPException |
| 85 | + |
| 86 | + |
| 87 | + class ValidationError(HTTPException): |
| 88 | + |
| 89 | + pass |
| 90 | + ``` |
| 91 | + То вам нужно его зарегистрировать как было показанно выше, |
| 92 | + иначе logs не смогут выявить данное исключение и данные будут потеряны. |
| 93 | +- registration middlaware |
0 commit comments