Skip to content

savelmtr/apptimism

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание

Это тестовое задание по созданию прототипа сайта для сдачи автомобилей в аренду. Администраторы могут сдавать автомобили юзерам, те при этом получают уведомления на 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.

Вариант файла .env.prod

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

Вариант файла .env.prod.db

POSTGRES_USER=my_app
POSTGRES_PASSWORD=my_pass
POSTGRES_DB=my_app_prod

Ну или как-то так.

Что есть в проекте

Логин, регистрация etc. доступны по очевидным адресам /accounts/login/ и /accounts/register/. Впрочем, страница с логином открывается для любого неавторизованного пользователя при попытке входа на сайт. Там же есть ссылки на регистрацию, сброс пароля (по умолчанию email backend -- консольный, там можно найти соответствующее письмо). Залогинившемуся обычному пользователю доступна страница профиля, где он может просмотреть свои автомобили, поменять информацию о себе и сменить пароль. Администратор же может открыть страницу с полным списком автомобилей, добавить машину в список, изменить информацию о машине, передать машину пользователю и забрать автомобиль у пользователя.

API

  • /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-сайте). У пользователя есть возможность выбрать язык, и автомобили отображаются с названием на том языке, который выбрал пользователь.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages