Это backend для сервиса аренды велосипедов, который предоставляет RESTful API для выполнения основных операций.
- Написаны модульные тесты на pytest
- Настроена генерация документации с использованием drf-yasg
- Написан Dockerfile и docker-compose.yaml для контейнеризации
- Для асинхронного выполнения задач используется Celery
- реализована авторизаци пользователя с помощью JWT
- Python 3.12
- Django 5.0 и Django REST Framework 3.15
- база данных - PostgreSQL
- Docker для контейнеризации
- Celery для асинхронного выполнения задач
- Redis в качестве брокера сообщений
- Flower для мониторинга задач в Celery
- pytest для тестирования
- drf-yasg для генерации документации
- djoser + simple-jwt для аутентификации и генерации токенов
В файле содержаться значения переменных, которые используютс для корректной работы проекта
DJANGO_SETTINGS_MODULE - путь к файлу настроект Django
SECRET_KEY - секретный ключ проекта Django
POSTGRES_DB - имя базы данных PostgreSQL
POSTGRES_USER - имя пользователя базы данных PostgreSQL
POSTGRES_PASSWORD - пароль от базы данных
POSTGRES_HOST - хост базы данных
POSTGRES_PORT - порт базы данных
CELERY_BROKER_URL - адрес броккера для Celery
CELERY_RESULT_BACKEND - адрес для результатов задач Celery
Для демонстрации работы приложения предоставляется суперпользователь со следующими данными:
username: admin
password: admin_password
Документация API доступна по адресу /swagger/ или /redoc/
Url: /auth/users/
Method: POST
Payload:
{
"username": string,
"email": string,
"password": string
}
Example payload:
{
"username": "test_user",
"email": "[email protected]",
"password": "test_password"
}
Answer:
{
"username": string,
"email": string,
"id": integer
}
Url: /auth/jwt/create/
Method: POST
Payload:
{
"username": string,
"email": string,
"password": "string
}
Example payload:
{
"username": "test_user",
"email": "[email protected]",
"password": "test_password"
}
Answer:
{
"refresh": string,
"access": string
}
Url: /auth/jwt/create/
Method: POST
Payload:
{
"refresh": string
}
Example payload:
{
"refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTcyMjQ0MjE4MSwiaWF0IjoxNzIyMzU1NzgxLCJqdGkiOiI4OGQ3NjEyZWE2NDI0YjQwYjkwMDg4MzA0MmNiNjFkNiIsInVzZXJfaWQiOjR9.q4qgtiKOZoW4syxtDeHxV8TQBsBNs7y1J3hza-S-wnw"
}
Answer:
{
"access": string
}
Url: /bicycles/available/
Method: GET
Headers:
Authorization: JWT <access_jwt_token>
Answer:
[
{
"id": integer,
"brand": string,
"cost_per_hour": string,
"is_rented": boolean
},
...
]
Url: /bicycles/rent/
Method: POST
Headers:
Authorization: JWT <access_jwt_token>
Payload:
{
"bicycle": integer
}
Example payload:
{
"bicycle": 1
}
Answer:
{
"id": integer,
"cost": null,
"paid": boolean,
"renter": integer,
"end_time": string,
"start_time": string,
"bicycle": integer
}
Url: /bicycles/return/
Method: POST
Headers:
Authorization: JWT <access_jwt_token>
Payload:
{}
Example payload:
{}
Answer:
{
"success": "Bicycle returned",
"rent": integer
}
Url: /bicycles/rent/
Method: GET
Headers:
Authorization: JWT <access_jwt_token>
Answer:
[
{
"id": integer,
"cost": string,
"paid": boolean,
"renter": integer,
"end_time": string,
"start_time": string,
"bicycle": integer
},
...
]
- Склонировать проект
git clone https://github.com/sitdoff/bicycles.git
- Перейти в папку проекта
cd bicycles
- Если есть необходимость, отредактировать файл .env
- Запустить создание контейнеров. При сборке образа проекта в базу будут загружены данныe для демонстрации.
docker compose up --build
- После окончания сборки проект будет доступер на http://localhost:8000