Это тестовое задание по созданию прототипа сайта для сдачи автомобилей в аренду. Администраторы могут сдавать автомобили юзерам, те при этом получают уведомления на email. Есть RestApi с token based autentication. В целом -- хорошее тестовое задание (все бы такие были), неплохо выявляет владение материалом. Плюсом является и то, что 80% проекта годятся для того, чтобы сразу использовать их в качестве основы для новых разработок, так как по сути стандартны.
Проект создан с учётом использования для развёртывания docker-compose
Существуют два пути развёртывания:
-
В среде разработки. Команда (выполнять в корне проекта):
sudo docker-compose up -d --build
. Эта команда развернёт базу данных postgres и сервер разработки Django, причём папка с проектом будет прикреплена как том к контейнеру с Django, тем самым все изменения в коде можно отслеживать без пересоздания имэйджа. -
В продакшн-среде. Для неё нужно написать файл .env.prod и .env.prod.db. Команда развёртывания:
sudo docker-compose -f docker-compose.prod.yml up -d --build
. Проект будет запущен с использованием gunicorn как wsgi-сервера и nginx как прокси + файлового сервера. Соответственно, данные будут храниться в трёх томах:postgres_data
,static_volume
,media_volume
. Всё весьма обычно. В связи с тем, что это -- тестовый проект, и цели деплоить его не стояло, в него не добавлены почтовый серверPosfix
, балансир нагрузкиPgBouncer
, система хранения кешейMemcached
. Поэтому же nginx тут слушает порт 1337.
DEBUG=0
SECRET_KEY=bar
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=my_app_prod
SQL_USER=my_app
SQL_PASSWORD=my_pass
SQL_HOST=db
SQL_PORT=5432
DATABASE=postgres
POSTGRES_USER=my_app
POSTGRES_PASSWORD=my_pass
POSTGRES_DB=my_app_prod
Ну или как-то так.
Логин, регистрация etc. доступны по очевидным адресам /accounts/login/
и /accounts/register/
. Впрочем, страница с логином открывается для любого неавторизованного пользователя при попытке входа на сайт. Там же есть ссылки на регистрацию, сброс пароля (по умолчанию email backend -- консольный, там можно найти соответствующее письмо). Залогинившемуся обычному пользователю доступна страница профиля, где он может просмотреть свои автомобили, поменять информацию о себе и сменить пароль. Администратор же может открыть страницу с полным списком автомобилей, добавить машину в список, изменить информацию о машине, передать машину пользователю и забрать автомобиль у пользователя.
-
/api/login/
-- POST-запрос с аргументами email и password возвращает JSON с ключомtoken
в случае успеха. В дальнейших запросах нужно использовать HTTP_AUTHORIZATION='Bearer {тут нужно вписать токен, без фигурных скобок}'. Либо, в случае использования утилиты http просто в теле запроса "Authorization: Bearer тут_токен" -
/api/register/
-- POST-запрос с аргументами email, password, first_name [опционально -- lang (может быть по умолчанию толькоen
иru
, но языки можно добавлять)]. В случае успеха создаст пользователя, под которым можно логиниться. -
/api/cars/
-- GET-запрос, возвращает JSON-список машин запросившего. -
/api/cars/<int:user_pk>
-- GET-запрос для админов, возвращает список машин произвольного пользователя по его pk. -
/api/users/
-- GET-запрос для админов, список всех пользователей сервиса. -
/api/users/<int:user_pk>
-- GET-запрос возвращает информацию о пользователе по pk. PUT-запрос с аргументами email, password, first_name и уже вышеупомянутый lang позволяет изменить информацию о пользователе.
Сайт двуязычен (ru, en). Можно добавлять свои переводы (как в любом Django-сайте). У пользователя есть возможность выбрать язык, и автомобили отображаются с названием на том языке, который выбрал пользователь.