Сервис поиска работы и сотрудников
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.cmd
email: 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