Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vladislavyar/grocery_store_sarafan
Backend проекта "магазин продуктов".
https://github.com/vladislavyar/grocery_store_sarafan
django django-rest-framework docker postgresql python
Last synced: 6 days ago
JSON representation
Backend проекта "магазин продуктов".
- Host: GitHub
- URL: https://github.com/vladislavyar/grocery_store_sarafan
- Owner: VladislavYar
- License: mit
- Created: 2024-04-22T18:11:36.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-04-24T10:07:17.000Z (7 months ago)
- Last Synced: 2024-04-24T13:19:22.548Z (7 months ago)
- Topics: django, django-rest-framework, docker, postgresql, python
- Language: Python
- Homepage:
- Size: 36.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
grocery_store_sarafan
Описание
Backend проекта "магазин продуктов".
Эндпоинты
Получение категорий
```JSON
method: GET
Authorization: No Auth
URL: http://domaine:port/api/v1/categories/
Status: 200 OK
Response:
{
"count": 1,
"next": "http://domaine:port/api/v1/categories/?page={int}",
"previous": "http://domaine:port/api/v1/categories/?page={int}",
"results": [
{
"title": "str",
"slug": "str",
"image": "http://domaine:port/media/images/{str}.png",
"subcategories": [
{
"title": "str",
"slug": "str",
"image": "http://domaine:port/media/images/{str}.png"
}
]
}
]
}
```
Получение продуктов
```JSON
method: GET
Authorization: No Auth
URL: http://domaine:port/api/v1/products/
Status: 200 OK
Response:
{
"count": 1,
"next": "http://domaine:port/api/v1/products/?page={int}",
"previous": "http://domaine:port/api/v1/products/?page={int}",
"results": [
{
"title": "str",
"slug": "str",
"image": [
"http://domaine:port/media/images/{str}.png",
"http://domaine:port/media/images/{str}.png",
"http://domaine:port/media/images/{str}.png"
],
"price": 1,
"category": "str",
"subcategory": "str"
}
]
}
```
Регистрация пользователя
```JSON
method: POST
Authorization: No Auth
URL: http://domaine:port/api/v1/auth/users/
Status: 201 Created
Request:
{
"username": "str",
"password": "str"
}
Response:
{
"email": "str",
"username": "str",
"id": 1
}
```
Получение токена
```JSON
method: POST
Authorization: No Auth
URL: http://domaine:port/api/v1/auth/jwt/create/
Status: 200 OK
Request:
{
"username": "str",
"password": "str"
}
Response:
{
"refresh": "str",
"access": "str"
}
```
Добавление/изменение/удаление товара из корзины
```JSON
method: POST
Authorization: Bearer Token
URL: http://domaine:port/api/v1/basket/
Status: 201 Create
Request:
{
"product": "str",
"count": 1
}
Response:
{
"product": {
"title": "str",
"slug": "str",
"image": [
"http://domaine:port/media/images/{str}.png",
"http://domaine:port/media/images/{str}.png",
"http://domaine:port/media/images/{str}.png"
],
"price": 1,
"category": "str",
"subcategory": "str"
},
"count": 1,
"total_price_product": 1
}
```
```JSON
method: PUT, PATCH
Authorization: Bearer Token
URL: http://domaine:port/api/v1/basket/
Status: 200 OK
Request:
{
"product": "str",
"count": 1
}
Response:
{
"product": {
"title": "str",
"slug": "str",
"image": [
"http://domaine:port/media/images/{str}.png",
"http://domaine:port/media/images/{str}.png",
"http://domaine:port/media/images/{str}.png"
],
"price": 1,
"category": "str",
"subcategory": "str"
},
"count": 1,
"total_price_product": 1
}
```
```JSON
method: DELETE
Authorization: Bearer Token
URL: http://domaine:port/api/v1/basket/
Status: 204 No Content
Request:
{
"product": "str",
"count": 1
}
```
Получение информации по корзине
```JSON
method: GET
Authorization: Bearer Token
URL: http://domaine:port/api/v1/basket/info/
Status: 200 OK
Response:
{
"products": [
{
"product": {
"title": "str",
"slug": "str",
"image": [
"http://domaine:port/media/images/{str}.png",
"http://domaine:port/media/images/{str}.png",
"http://domaine:port/media/images/{str}.png"
],
"price": 1,
"category": "str",
"subcategory": "str"
},
"count": 1,
"total_price_product": 1
}
],
"total_count": 1011,
"total_price_products": 6066
}
```
Очистка корзины
```JSON
method: DELETE
Authorization: Bearer Token
URL: http://domaine:port/api/v1/basket/clean/
Status: 204 No Content
```
Как запустить
Через Docker
- 1. Создать и заполнить файл
.env
в папке
infra
по шаблону
.env.example
.
-
2. Если имеется утилита
Make
, в корне проекта выполнить командуmake project-init
,
иначе
выполнить команду
docker compose -f ./infra/docker-compose.yml --env-file ./infra/.env up -d
.
Docker
соберёт контейнеры сpostgreSQL
, приложением, выполнит миграцию,
заполнит БД тестовыми категориями, подкатегориями и продуктами, создаст superuser-a.
После сервер будет доступен по адрессу:
http://127.0.0.1:8000/
.
-
Примечание
3. В контейнер с приложением проброшен
volume
с кодом, изменение кода в проекте обновляет его в контейнере и перезапускает сервер.
-
4. Последующие запуски проекта осуществляются через команду
make project-start
или
docker compose -f ./infra/docker-compose-start.yml --env-file ./infra/.env up -d
Через консоль
- 1. Создать и заполнить файл
.env
в папке
infra
по шаблону
.env.example
.
-
2. Создать БД в
postgreSQL
.
-
3. Перейти в корень проекта и создать виртуальное окружение
python -m venv venv
.
-
4. Активировать виртуальное окружение
source venv/Scripts/activate
.
-
5. Установить зависимости
pip install -r requirements.txt
.
-
6. Выполнить миграцию БД
python src/manage.py migrate
.
-
7. Создать superuser-a
python src/manage.py createsuperuser --noinput
.
-
8. Заполнить БД тестовыми данными(категории, подкатегории, продукты)
python src/manage.py test_data
.
-
9. Запустить сервер
python src/manage.py runserver
.
-
10. Сервер будет доступен по адрессу:
http://127.0.0.1:8000/
.
Стек