Реализовать Django + Stripe API бэкенд со следующим функционалом и условиями:
- Django Модель Item с полями (name, description, price)
- API с двумя методами:
- GET /buy/{id}, c помощью которого можно получить Stripe Session Id для оплаты выбранного Item. При выполнении этого метода c бэкенда с помощью python библиотеки stripe должен выполняться запрос stripe.checkout.Session.create(...) и полученный session.id выдаваться в результате запроса
- GET /item/{id}, c помощью которого можно получить простейшую HTML страницу, на которой будет информация о выбранном Item и кнопка Buy. По нажатию на кнопку Buy должен происходить запрос на /buy/{id}, получение session_id и далее с помощью JS библиотеки Stripe происходить редирект на Checkout форму stripe.redirectToCheckout(sessionId=session_id)
- Залить решение на Github, описать запуск в Readme.md
- Опубликовать свое решение чтобы его можно было быстро и легко протестировать.
- Запуск используя Docker
- Использование environment variables
- Просмотр Django Моделей в Django Admin панели
- Запуск приложения на удаленном сервере, доступном для тестирования
- Модель Order, в которой можно объединить несколько Item и сделать платёж в Stripe на содержимое Order c общей стоимостью всех Items
- Модели Discount, Tax, которые можно прикрепить к модели Order и связать с соответствующими атрибутами при создании платежа в Stripe - в таком случае они корректно отображаются в Stripe Checkout форме.
- Добавить поле Item.currency, создать 2 Stripe Keypair на две разные валюты и в зависимости от валюты выбранного товара предлагать оплату в соответствующей валюте
- Реализовать не Stripe Session, а Stripe Payment Intent.
Сервис, общающийся со Stripe и создающий платежные формы для товаров и заказов. На текущий момент реализовано:
- Реализованы модели Stripe и Order в models.py
- Получение HTML страниц со списком товаров или заказов, с информацией о выбранном товаре или заказе, об успешной оплате или прерывания оплаты
- Получение Stripe Session Id для оплаты выбранного Item через метод GET по адресу /buy/{id}
- Вынос environment variables в файл .env (предоставлен)
- Очищен код с помощью линтеров black и isort
- Настроена Django Admin панель для просмотра, создания, редактирования и удаления данных моделей
- Контейнеризация приложения через docker
- Запуск приложения на удаленном сервере (демонстрация по запросу)
Сервис разработан с использованием Django, Django Rest Framework, библиотеки stripe.
В качестве БД использовался PostgreSQL. Для обеспечения корректной связи Django и PostgreSQL использовалась библиотека psycopg2-binary.
Также проект и БД были обернуты в Docker-контейнеры и запускаются при помощи docker compose
Для запуска контейнера с приложением необходимо:
Скачать репозиторий
git clone https://github.com/mabredin/ranks_test_task.git
Перейти в папку ranks_test_task/src/
cd ranks_test_task/src/
*Если запуск производится на сервере и используется публичный ip, необходимо добавить его в .env в ALLOWED_HOSTS через запятую
Запустить контейнер
make docker-up
Проверить результат (по желанию)
docker ps
Успешный результат команды представлен на рисунке ниже:
Для заполнения данных необходимо выполнить несколько шагов:
- Сделать миграции
docker compose run web python manage.py migrate
или
sudo docker compose run web python manage.py migrate
- Создать пользователя для доступа к административной панели Django
docker compose run web python manage.py createsuperuser
или
sudo docker compose run web python manage.py createsuperuser
- Ввести данные пользователя.
- В браузере перейти по адресу 0.0.0.0:8000/admin или <server_ip>:8000/admin
- Войти под созданным пользователем и создать товары (заказы).
- Снова перейти по адресу 0.0.0.0:8000/ или <server_ip>:8000/
- Сервис готов.
Страница с информацией о товаре
Страница с информацией о заказе
Пример работы сервиса на удаленном сервере
Так как проект представляет собой выполнение тестового задания, в репозитории присутствуют файлы .env, Makefile и requirements_dev.txt