Микросервис написан при помощи фреймворка Django.
Описание всех выполненных задач находится в папке README_FILES.
В папке autotests находятся интеграционные и сценарные автотесты. Распределены по папкам, в зависимости от названия django-приложения.
Unit-тесты находятся внутри папки каждого из приложений в файле tests.py
и реализованы через TestCase.
- Разработка
- Состав приложений
- Документирование API
- Логирование
- Аутентификация
- Модели:
- Команды make
- Всем добра!
Для разработки необходимо создать свой fork репозитория. При создании необходимо убрать галочку с поля Copy the main branch only
.
После этого вы можете клонировать свой fork и начинать работу. Необходимо создать ветку в формате feature/fix/hotfix-{краткое описание}
(например fix-switch-lang-to-eng
).
Необходимо создать и активировать виртуальное окружение:
python -m venv venv
source venv/bin/activate
Затем необходимо установить зависимости:
pip install -r requirements.txt
Перед началом разработки необходимо установить pre-commit хуки:
pre-commit install
После этого перед каждым вашим коммитом необходимые линтеры будут запускаться автоматически. Если линтер исправил ваши файлы, их необходимо снова добавить в staged
и создать коммит повторно.
- Задачи распределяются в coda.io. После получения таски, необходимо указать себя исполнителем.
- Делается clone ветки(либо fork, если хотите копию репозитория у себя на GitHub).
- Ветка называется по шаблону [feature(либо fix)-<номер таски>] - англ.описание. Пример:
[feature-44] - add-fields
- Перед сдачей необходимо сделать проверку на запуск проекта
python manage.py runserver
И прогнать линтеры. Сначала isort, затем black.
- Commit к PR оформить в формате [feature-<номер таски>]: русское описание. Пример:
[feature-32]: добавил NewApiView и исправил логи в app.py
- PR делаем в ветку develop.
- Dockstring на английском языке.
- Для разворачивания и работы с проектом необходимо иметь виртуальное окружение на Python 3.12 и Django 5.
- Результат выполненной работы в рамках таски описать в README_FILES, назвав файл в формате task_<№>.md. Дополнительное документирование прописать в случае, если указано в самой таске
- Покрыть код тестами через TestCase, указав что протестировали в readme.
- Наложить логирование на основные действия кода.
- Миграции в проект не заливать.
- При добавлении новой библиотеки обязательно делаем
pip freeze > requirements.txt
- Длина строки <79 символов.
Микросервис использует следующие приложения:
- account(Авторизация/Аутентификация пользователя)
- common(Общие элементы приложения. Пример: модель, которая относится сразу к нескольким сущностям)
- core(Базовые утилиты проекта. Пример: базовый mixin, добавленный в 80% моделей)
- hackathons(Логика и модели, необходимые для Хакатона)
- main(Корневая папка Django-проекта)
- profiles(Всё, что связан ос профилем пользователя)
- projects(Всё, что связано с проектами)
Для документирования API используется библиотека drf-spectacular.
Почему именно DRF Spectacular? drf-spectacular - единственный проект, который сейчас активно поддерживается. django-rest-swagger и drf-yasg устарели и не обновлялись уже несколько лет.
docs/
- скачать документацию .ymldocs/swagger-ui/
- документация swagger-uidocs/redoc/
- документация redoc
drf-spectacular - подключен к классу drf_spectacular.openapi.AutoSchema, то есть Swagger-UI и ReDoc документации будут строиться сами. Для более гибкой настройки в основном нужно использовать декоратор @extend_schema
.
- В корне репозитория есть папка
/logs
(если её нет, она создастся автоматически), куда пишутся файлы логов. - Файл, созданный в текущий день, называется
logs
. Файлы, созданные в предыдущие дни имеют имяlogs.{дата создания файла}
. По окончании текущего дня (в 00:00) при попытке записать новый лог файлlogs
меняет имя наlogs.{дата только что минувшего дня, она же - дата создания файла}
, и создаётся новый пустой файл с именемlogs
, куда и будет записан этот новый лог (и все следующие логи наступившего дня). - Всего в
/logs
могут находиться 4 файла:logs
и три файла, созданных в предыдущие три дня. Все файлы старше трёх дней уничтожаются. - В файл
logs
пишутся все логи текущего дня уровняWARNING
и выше в формате{levelname} - {asctime} - {module} - {message}
. - В консоль выводятся логи всех уровней в формате
{levelname} - {asctime} - {module} - {message}
. - В
/settings/logging.py
находится всё, что связано с логами. В частности, там находится функцияexample_logs()
(а также её вызов), которая производит тестовые логи. При первичном старте сервера она выполняется два раза, но далее всё работает как нужно. - Примечание
Предположим, что у нас есть файлlogs
и запущен сервер. Если при этом сменится день (неважно, естественным путём или ручной сменой даты), после чего произойдёт перезапуск сервера путёмautoreload
, то файлlogs
не будет переименован ввиду ошибки по типу:PermissionError: [WinError 32] Процесс не может получить доступ к файлу, так как этот файл занят другим процессом: 'C:\\work\\microservice-python-pp-web\\logs\\logs' -> 'C:\\work\\microservice-python-pp-web\\logs\\logs.2024-08-27'.
, а также логи перестанут записываться в файл. Скорее всего, это связано с работой файловой системы Windows. При ручном перезапуске сервера ошибок не возникает.
В данном проекте реализована система аутентификации и управления профилями пользователей. Все функции, связанные с аутентификацией, размещены в приложении account. Проект включает следующие компоненты:
- Валидация на номер телефона.
- Валидация на кодовое слово: не более 12 слов.
- Валидация на пароль: не менее 8 символов, обязательно буквы и цифры, одна заглавная буква.
- Все поля сделаны необязательными. = Ограничение на размер фото. (не больше 4мб и разрешение максимум 200x200)
- Валидация на возраст.
- Валидация на город: первая буква заглавная.
При трех неудачных попытках входа пользователь может аутентифицироваться по 4-значному коду из почты или (пока нет) номеру телефона. Кодовое слово хранится в базе данных в зашифрованном виде.
Созданы три тестовых шаблона для:
- Регистрации данных в поле User.
- Регистрации данных в поле Profile.
- Входа в приложение (переход на auth/hi после успешного входа).
- Описание:
- Модели составлены на основании описания проекта и бизнес-моделей.
- Чертёж хранится по ссылке
https://dbdiagram.io/d/Pretty-Pet-66c894f4a346f9518ce84d0f
Редактировать чертёж может Александр (tg: chutzp4h, discord: ne_pedofil_a_beta_tester). - Чертёж в виде svg:
- Чертёж в виде DBML (Database Markup Language):
database_structure.md
Для упрощения работы в приложении созданы команды make, перечисленные ниже. Для их использования необходимо установить пакет make при помощи команды sudo apt-get install make
. Если у вас windows, вам необходимо установить cmake или работать через wsl.
make freeze
- перезаписывает файл requirements.txt текущими зависимостями;make install
- устанавливает зависимости из файла requirements.txt;make run
- запускает сервер для разработки;make makemigrations
- создает миграции;make migrate
- выполняет миграции;make automigrate
- создает и выполняет миграции.