Проект выполнен в рамках хакатона от Яндекс.Практикума с 3 декабря по 28 декабря 2024 года.
Подробная информация о Хакатоне
HTML5, JavaScript ES6, Sass / SCSS
Python, Django REST Framework, drf-spectacular, Redis, Celery, Nginx, Docker, GitHub Actions, Gunicorn, corsheaders
В команде выступала в роли python-разработчика. В мои задачи входило:
- Анализ сервисов по конвертации валют
- Интеграция со сторонним сервисом по конвертации валют
- Подключение логов
- Создание собственного сервиса для предоставления данных во фронтенд
- Написание тестов (pytest)
- Настройка nginx на прод-сервере для обеспечения cors-политики
- Создание entrypoint.sh для backend/Dockerfile: миграции, сбор и копирование статики, создание админа (создание админа вынесено в management/commands)
- Создание Dockerfile для frontend
- Свод проекта для локального билда, изменение docker-compose.yml
- Склонируйте проект:
git clone https://github.com/belyashnikovatn/currency-converter.git
- Используйте .env.example и создайте свой .env. Примечания:
APIKEY - токен можно получить здесь - https://freecurrencyapi.com/
DB_HOST='postgres_db' - должен совпадать с названием сервиса postgres_db в docker-compose
- В терминал для запуска выполните команду:
docker compose up --build -d
- Проект станет доступен по ссылке
- Интерфейс drf станет доступен по ссылке
- Документация на сервис станет доступна по ссылке
- Админка станет доступна по ссылке
- Вью для get-запроса и обработки параметров
- Сериализатор для проверки параметров: наличие, соответствие
Запрос:
http://127.0.0.1:8000/api/convert?from=USD&to=RUB&amount=125
Ответ:
{
"info": {
"rate": 100.0191775342
},
"query": {
"amount": "125",
"from": "USD",
"to": "RUB"
},
"result": 12502.397191775
}
Примеры запросов для тестирования сервиса:
http://127.0.0.1:8000/api/convert?from=USD&to=EUR&amount=100
http://127.0.0.1:8000/api/convert?from=rub&to=USD&amount=100
http://127.0.0.1:8000/api/convert?from=RUB&to=eur&amount=5.5
http://127.0.0.1:8000/api/convert?from=rub&to=qqq&amount=100
Реализация интеграции с сервисом находится в файле api/external_currency/freecurrencyapi.py
Чтобы отдельно протестировать работу сервиса:
- Допишите в конце файла:
if __name__ == '__main__':
result = convert('RUB', 'EUR', 10000)
print(result)
- Запустите файл:
python api/external_currency/freecurrencyapi.py
Документация на сервис - https://freecurrencyapi.com/docs/
Для подключения к freecurrencyapi нужен apikey, бесплатный тариф имеет ограничения:
"5k Free Monthly Requests + 32 World Currencies + All exchange rates are updated on a daily basis".
/api/external_currency/config.py
Для связи фронта с бэкендом на удалённом сервере настроен nginx для обеспечения cors-политики. Связь фронта с бэком прописасана в файле: /currency-converter/frontend/src/pages/index.js строка 23