| title | description |
|---|---|
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° |
ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΡΡΡΡΠΊΡΡΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ Π² Python Backend ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
|
Π‘Π»Π΅Π΄ΠΈΠΌ Π·Π° ΡΠ΅ΠΌ ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ»ΠΎΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
- ΠΊΠΎΠ½ΡΠΈΠ³ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ env)
- Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
- ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ
- ΠΌΠΎΠ΄Π΅Π»ΠΈ
- ΡΠ»ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ (Π·Π°ΠΏΡΠΎΡΡ Π² Π°ΠΏΠΈ, Ρ3, Π±Π΄, ΠΊΠ°ΡΠΊΡ ΠΈ Ρ Π΄)
- Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°
- web ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
- Π΅Π΄ΠΈΠ½Π°Ρ ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° Π³Π΄Π΅ ΠΎΠΏΠΈΡΠ°Π½Ρ Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ»Ρ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π² ΡΠ΅ΡΠ²ΠΈΡΠ°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΡΡΡΠΊΡΡΡΠ° Π²ΠΈΠ΄Π°:
ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ usecase-ΠΎΠ², ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΈ ΡΠ΄. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ:
- models - ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (alembic, marshmallow, etc)
- repositories - ΡΡΠΎΠ²Π΅Π½Ρ Π΄Π°Π½Π½ΡΡ . ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π»ΠΎΠ³ΠΈΠΊΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, Π΄ΠΎΡΡΡΠΏΠ°, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠΈ.
- services - ΡΡΠΎΠ²Π΅Π½Ρ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠΈ. ΠΡΠΎΡ ΡΡΠΎΠ²Π΅Π½Ρ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΏΡΠΎ web ΠΈ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΏΡΠΎ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ (ΠΠ, s3, ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΈ ΠΏΡ.)
ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΡ web ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ endpoint'ΠΎΠ², ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ apispec, ΠΈ ΠΏΡ.
- routes.py - ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ Π²ΡΠ΅Ρ endpoint'ΠΎΠ²
- api - Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ endpoint'ΠΎΠ²: ΡΡ Π΅ΠΌΡ Π²Ρ ΠΎΠ΄Π½ΡΡ /Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², apispec, ΠΊΠΎΠ΄ Π²ΡΠ·ΠΎΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΈΠ· app/services.
- settings - ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
- helpers / utils - ΠΠ±ΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ
- requirements - ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
- docker-compose.yml - ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΠΠ, s3, ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ), Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
- manage.py - Π΅Π΄ΠΈΠ½Π°Ρ ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° Π³Π΄Π΅ ΠΎΠΏΠΈΡΠ°Π½Ρ Π²ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΡΠΎΠ΅ΠΊΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pyproject.toml ΡΠ°ΠΉΠ»Π° (Π²ΠΌΠ΅ΡΡΠΎ setup.cfg ΠΈ requirements.txt), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ dev ΠΈ prod Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΠΈ Π»ΠΈΠ½ΡΠ΅ΡΠΎΠ² ΠΈ pytest'Π°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ uv (ΡΡΡΠ»ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² confluence). ΠΠ΅ΡΡΠΈΠΈ Π²ΡΠ΅Ρ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΡΠΈΠΊΡΠΈΡΡΠ΅ΠΌ Π² uv.lock ΡΠ°ΠΉΠ»Π΅ Π² ΠΊΠΎΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°. uv.lock Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ uv Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠΈΠΏΠΎΠ²ΠΎΠ³ΠΎ Dockerfile (python3.10):
FROM python:3.10-slim
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN pip install uv && \
uv sync --frozen
COPY . .
CMD ["python", "manage.py", "runserver"]Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΡΡ Π½Π΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π»ΠΈΡΡ Π² Π±ΠΈΠ»Π΄Π΅, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ .dockerignore ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π±ΠΈΠ»Π΄Π°. Π .dockerignore ΡΠ°ΠΉΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ tests/
Π¨Π°Π±Π»ΠΎΠ½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Makefile'Π° Ρ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ
| ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
make help |
ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΊΡΠ°ΡΠΊΡΡ ΡΠΏΡΠ°Π²ΠΊΡ |
make install-uv |
Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° uv |
make install |
ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° |
make install-dev |
ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ |
make run |
Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ |
make lint |
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π»ΠΈΠ½ΡΠ΅ΡΠ°ΠΌΠΈ Π΄ΠΈΡΡΠ° ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅ΡΠΊΠΈ Ρ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ (ruff + mypy) |
make test |
Π·Π°ΠΏΡΡΠΊ Π²ΡΠ΅Ρ ΡΠ΅ΡΡΠΎΠ² |
make format |
ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ruff'ΠΎΠΌ Π΄ΠΈΡΡΠ° ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅ΡΠΊΠΈ Ρ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ |
make format-all |
ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ruff'ΠΎΠΌ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° |
make db-migrate 'migration name' |
ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ |
make db-upgrade |
ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ |
make db-downgrade |
ΠΎΡΠΊΠ°ΡΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ |
make db-history |
ΠΈΡΡΠΎΡΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ |
make db-reset |
ΠΎΡΠΊΠ°ΡΠΈΡΡ ΡΡ Π΅ΠΌΡ ΠΠ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Π·Π°Π½ΠΎΠ²ΠΎ |
make docker-run |
Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ΡΠ΅Π· docker-compose |
make docker-stop |
ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠ΅Ρ docker-compose ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² |
make docker-logs |
Π»ΠΎΠ³ΠΈ docker-compose ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² |
make docker-rebuild |
ΠΏΠ΅ΡΠ΅Π±ΠΈΠ»Π΄ docker-compose ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² |
make docker-infra |
Π·Π°ΠΏΡΡΠΊ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² |
make clean |
ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΡΡΠΈ Π»ΠΈΠ½ΡΠ΅ΡΠΎΠ² ΠΈ ΡΠ΅ΡΡΠΎΠ² |
make kill-server |
ΡΠ±ΠΈΡΡ python-ΠΏΡΠΎΡΠ΅ΡΡΡ, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ |
make kill-server-force |
force-kill python-ΠΏΡΠΎΡΠ΅ΡΡΡ, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ |
make server-status |
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΡΡΡΠ° ΡΠ΅ΡΠ²ΠΈΡΠ° |