Сервис поиска работы и сотрудников
Django 4.1.7- основаDjango Rest Framework 3.14.0- для создания REST API на базе Djangodjangorestframework-simplejwt- для JWT аутентификацииdjango-cors-headers- позволяет обращаться к API из других приложений (фронта)drf-yasg- для автоматической генерации OpenAPI и последующим использовнием в Swager UIpytest- используется для тестирования (т.к. встроенное Django тестирование не дает удобных и гибких настроек (в частности не позволяет делать фикстуры к тестам))django-debug-toolbar- позволяет отслеживать запросы к БД и наглядно демонстрирует где их нужно оптимизировать
Имеется простое React JS (с Bootstrap) приложение для этого REST API.
Для запуска следуйте инструкциям в GitHub репозитории - https://github.com/Protages/your-work-frontend
Клонируем GitHub репозиторий в любую папку
git clone https://github.com/Protages/your-work-backendПереходим в папку проекта
cd your-work-backendСоздаем виртуальное окружение, активируем его и устанавливаем зависимости (подробнее в requirements.txt)
python -m venv env
.\env\Scripts\activate
pip install -r requirements.txtАвтоматически создаст тестовую БД (на Windows). После выполнения закройте открывшуюся консоль (если появилась).
Внимание: Этот скрипт удаляет старую базу данных!
.\create_mvp_db.cmdemail: company_1@mail.com, password: company1pass
email: canditate_1@mail.com, password: canditate1pass
email: superuser@mail.com, password: superuserpass
При необходимости можно использовать другие данные, смотрите в src/tests/endpoints/data/ файлы company_data.py и candidate_data.py соответственно
Создаем базу данных в ручную и применяем миграции
python src/manage.py makemigrations
python src/manage.py migrateЗапуск приложения локально
python src/manage.py runserverТеперь REST API доступно по ссылке - http://127.0.0.1:8000/
Для удобного ознакомления лучше перейти на http://127.0.0.1:8000/docs/ где распологается Swagger UI, со всеми эндпойнтами и примерами запросов - ответов
Запуск интеграционных тестов
pytest src/ --verbosity=2 --order-group-scope=moduleВ проекте компания и соискатель привязаны к одной модели User, тем самым упрощается реализация аутентификации для двух (по сути) разных сущностей (не дает существенных нагрузок к БД). Это позволяет использовать встроенные механихме аутентификации Django и (что важнее) иметь уникальное поле для всех клиентов (будь то компания или соискатель - email). При этом один User не может иметь связь с Company (как owner) и с Candidate (как соискатель) одновременно (исключение - User может быть соискателем, и при этом быть сотрудником (не owner) Company (модель Staff (пока не реализовано полноценно))).
В качестве ORM выбрана встроенная Django ORM, т.к. она не требует дополнительной настройки, проста в использовании и в контексте текущих задач отлично подходит. Встроенные в Django ORM методы select_related и prefetch_related позволяют реализовать достаточно оптимизированные запросы в текущих условиях.
(будь больше времени рассмотрел бы SQLAlchemy в Django (уже использовал с FastAPI)).
Изначально спроектировал схему БД (пока не все реализовано) - https://drawsql.app/teams/none-831/diagrams/your-work-schema