No description
- Python 79.2%
- Shell 11.4%
- Go Template 9.4%
| app | ||
| bin | ||
| deploy | ||
| docs | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| dev-requirements.in | ||
| dev-requirements.txt | ||
| manage.py | ||
| nose2.cfg | ||
| pyrightconfig.json | ||
| README.md | ||
| requirements.in | ||
| requirements.txt | ||
| you_need_app_dotenv | ||
micro_django
Ядро/шаблон Django-проекта: app/config (инфраструктура), app/core
(переиспользуемое, не привязанное к проекту) и каркас для модулей приложения.
Структура
.
├── .pre-commit-config.yaml # запускает black через bin/dev/format
├── .tool-versions # asdf: python/node (локальный, часто gitignored)
├── manage.py
├── nose2.cfg
├── pyrightconfig.json
├── app
│ ├── config # settings, routers, wsgi, инфраструктура
│ │ ├── celery.py
│ │ ├── logging.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ ├── core # общее для модулей, не project specific
│ │ ├── middlewares
│ │ │ ├── access_log.py # RequestLogMiddleware, включается LOG_ACCESS=1
│ │ │ ├── csrf.py
│ │ │ ├── request_id.py
│ │ │ └── urls.py
│ │ ├── models.py
│ │ └── utils
│ │ ├── classutils.py # classproperty
│ │ ├── db.py # query_exec / query_all_dict / query_all_scalar / ...
│ │ ├── env.py # get_env_var
│ │ ├── i18n.py
│ │ ├── ip.py # get_client_ip
│ │ ├── logging
│ │ │ ├── __init__.py
│ │ │ ├── context.py
│ │ │ ├── filters.py
│ │ │ ├── formatters.py
│ │ │ ├── handlers.py
│ │ │ └── loggers.py
│ │ ├── ninja
│ │ │ ├── handlers.py # register_error_handlers
│ │ │ └── permissions.py
│ │ └── test
│ │ ├── client.py
│ │ └── nose2.py # nose2-плагин, eager celery
│ ├── management # application scripts to run from cli
│ │ └── commands
│ │ ├── __init__.py
│ │ └── run_playground.py
│ ├── media # user-uploaded stuff
│ │ └── .keep
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_user.py
│ │ └── __init__.py
│ ├── models
│ │ ├── __init__.py
│ │ └── auth.py
│ ├── schemas # structs for serialization(pydantic/msgspec and similar)
│ │ └── __init__.py
│ ├── services # business logic extracted from views and can be reused somewhere else, like management/commands
│ │ └── __init__.py
│ ├── staticfiles # js/css/img
│ │ └── .keep
│ ├── tasks # celery tasks
│ │ └── __init__.py
│ ├── tests # we're using unittest-like approach
│ │ ├── __init__.py
│ │ └── test_hello.py
│ └── views # api is for ninja, others are for vanilla django
│ └── api
│ ├── hello.py
│ └── ping.py
├── bin # handy executables
│ ├── db_data_dump
│ ├── db_init
│ ├── db_schema_dump
│ ├── gen_nginx_conf
│ ├── supervisor
│ └── dev
│ ├── db_drop
│ ├── format # black (line-length 88, migrations исключены)
│ ├── server
│ ├── test
│ └── venv
├── deploy # mostly production stuff
│ ├── README.md
│ ├── app-supervisor.service
│ ├── deployment-cheat-sheet.md
│ ├── deps-linux.sh
│ ├── nginx
│ │ ├── nginx-config.sh
│ │ └── nginx.conf.tpl
│ ├── pg
│ │ ├── init-pg.sh
│ │ └── init.sql.tpl
│ ├── supervisor-dev.conf
│ ├── supervisor-prod.conf
│ └── zabbix
│ ├── README.md
│ ├── userparameter_supervisor.conf
│ ├── zabbix
│ └── zabbix_v7_supervisor_template.json
├── docs # don't forget to populate this :)
│ └── .keep
├── dev-requirements.in
├── dev-requirements.txt
├── requirements.in
├── requirements.txt
└── you_need_app_dotenv
Быстрый старт
cp you_need_app_dotenv app.env # заполнить переменные
bin/dev/venv # создать .venv и синхронизировать зависимости
bin/db_init # поднять postgres
bin/dev/server # runserver
Тесты (nose2, celery в eager-режиме):
bin/dev/test
bin/dev/test --parallel 4
Инструменты
- Форматирование —
blackчерезbin/dev/format(исключаетmigrations/). Чтобы он бежал на коммите:pip install pre-commit && pre-commit install. - Логи запросов — выставить
LOG_ACCESS=1вapp.env, чтобы включитьRequestLogMiddleware(метод, путь, тела запроса/ответа, runtime). - Celery — очереди
defaultиscheduled; beat-расписание вapp/config/settings.py. - Деплой — см.
deploy/README.mdиdeploy/deployment-cheat-sheet.md.