Python · API · Середній рівень

Кошик

5 завдань

Додавайте, оновлюйте та видаляйте товари в кошику за допомогою авторизованих запитів.

Огляд Cart API

#
API кошика керує кошиком для покупок, прив'язаним до вашого облікового запису. Кожен запит до ендпоінтів кошика вимагає авторизації — надсилайте заголовок Authorization так само, як і для ендпоінтів профілю. У кошика дві групи ендпоінтів: Огляд кошика: ``` GET /api/cart/ Переглянути кошик (загальна сума, список товарів) ``` Елементи кошика: ``` POST /api/cart/items/ Додати продукт до кошика PATCH /api/cart/items/{id}/ Оновити кількість одного товару DELETE /api/cart/items/{id}/ Видалити один товар DELETE /api/cart/items/ Очистити весь кошик ``` Відповідь GET /api/cart/ виглядає так: ```json { "items": [ { "id": 42, "product": {"id": 7, "name": "Oak Chair", "price": "149.99", ...}, "quantity": 1, "products_price": "149.99" } ], "total_price": "149.99", "total_quantity": 1 } ``` Кожен елемент у кошику має власний id (id елемента кошика, а не продукту). Він потрібен для оновлення або видалення конкретного товару. Щоб додати продукт до кошика, потрібен його slug — візьміть його з поля `slug` у відповіді /api/products/.

Додавання, оновлення та видалення товарів з кошика

#
Повний робочий процес з кошиком — від порожнього до зміненого та очищеного: ```python import requests BASE_URL = 'https://apilearn.tukas.dev' # Спочатку авторизуємося token = requests.post(f'{BASE_URL}/api/auth/token/', json={ 'username': 'alice42', 'password': 'securepass123', }).json()['token'] session = requests.Session() session.headers['Authorization'] = f'Token {token}' # Переглянути порожній кошик cart = session.get(f'{BASE_URL}/api/cart/').json() print('Товарів у кошику:', len(cart['items'])) ``` Додати продукт (потрібен slug продукту з /api/products/): ```python # Отримати продукт щоб взяти його slug product = session.get(f'{BASE_URL}/api/products/1/').json() product_slug = product['slug'] # Додати з кількістю 2 response = session.post(f'{BASE_URL}/api/cart/items/', json={ 'product_slug': product_slug, 'quantity': 2, }) print(response.status_code) # 201 Created item = response.json() cart_item_id = item['id'] # зберегти — потрібен для оновлення/видалення print('Id елемента кошика:', cart_item_id) ``` Оновити кількість: ```python response = session.patch( f'{BASE_URL}/api/cart/items/{cart_item_id}/', json={'quantity': 5}, ) print(response.json()['quantity']) # 5 ``` Видалити цей товар: ```python response = session.delete(f'{BASE_URL}/api/cart/items/{cart_item_id}/') print(response.status_code) # 204 No Content ``` Очистити весь кошик одразу: ```python response = session.delete(f'{BASE_URL}/api/cart/items/') print(response.status_code) # 204 No Content # Перевірити, що кошик порожній cart = session.get(f'{BASE_URL}/api/cart/').json() print('Товарів після очищення:', len(cart['items'])) # 0 ``` Зверніть увагу на різницю між двома DELETE ендпоінтами: /api/cart/items/{id}/ видаляє один товар, /api/cart/items/ (без id) — всі товари.

Довідник Cart API

#
Ендпоінти кошика (усі вимагають авторизації): ``` GET /api/cart/ Переглянути кошик із товарами і сумою POST /api/cart/items/ Додати товар тіло: {product_slug: str, quantity: int} повертає: 201 + об'єкт елемента кошика PATCH /api/cart/items/{id}/ Оновити кількість тіло: {quantity: int} повертає: 200 + оновлений елемент DELETE /api/cart/items/{id}/ Видалити один товар → 204 DELETE /api/cart/items/ Очистити всі товари → 204 ``` Форма відповіді кошика: ```json {"items": [...], "total_price": "149.99", "total_quantity": 1} ``` Об'єкт елемента кошика: ```json {"id": 42, "product": {...}, "quantity": 2, "products_price": "299.98"} ``` Ключова відмінність: ``` product.slug — slug продукту, використовується при додаванні до кошика item.id — id елемента кошика, використовується при patch/delete ```
01

Переглянути кошик

#

Авторизуйтеся і надішліть GET до /api/cart/. Виведіть кількість товарів у кошику та загальну суму.

import requests

BASE_URL = 'https://apilearn.tukas.dev'

# 1. Отримайте токен
# 2. GET /api/cart/ і виведіть кількість товарів і суму
Рішення
import requests

BASE_URL = 'https://apilearn.tukas.dev'

token = requests.post(f'{BASE_URL}/api/auth/token/', json={
    'username': 'ВАШ_ЛОГІН', 'password': 'ВАШ_ПАРОЛЬ',
}).json()['token']

headers = {'Authorization': f'Token {token}'}
cart = requests.get(f'{BASE_URL}/api/cart/', headers=headers).json()
print(len(cart['items']))
print(cart['total_price'])
02

Додати продукт до кошика

#

Знайдіть будь-який продукт із /api/products/ та додайте його до кошика з кількістю 1. Виведіть id елемента кошика з відповіді.

import requests

BASE_URL = 'https://apilearn.tukas.dev'

# 1. Авторизуйтеся
# 2. Візьміть slug продукту з /api/products/
# 3. POST до /api/cart/items/ і виведіть id елемента кошика
Рішення
import requests

BASE_URL = 'https://apilearn.tukas.dev'

token = requests.post(f'{BASE_URL}/api/auth/token/', json={
    'username': 'ВАШ_ЛОГІН', 'password': 'ВАШ_ПАРОЛЬ',
}).json()['token']

headers = {'Authorization': f'Token {token}'}

# Взяти перший продукт — взяти його slug
product_slug = requests.get(f'{BASE_URL}/api/products/').json()['results'][0]['slug']

response = requests.post(
    f'{BASE_URL}/api/cart/items/',
    json={'product_slug': product_slug, 'quantity': 1},
    headers=headers,
)
print(response.json()['id'])
03

Оновити кількість товару

#

Додайте продукт до кошика, потім оновіть його кількість до 3 через PATCH /api/cart/items/{id}/. Виведіть оновлену кількість із відповіді.

import requests

BASE_URL = 'https://apilearn.tukas.dev'

# 1. Авторизуйтеся
# 2. Додайте продукт
# 3. PATCH кількість до 3
Рішення
import requests

BASE_URL = 'https://apilearn.tukas.dev'

token = requests.post(f'{BASE_URL}/api/auth/token/', json={
    'username': 'ВАШ_ЛОГІН', 'password': 'ВАШ_ПАРОЛЬ',
}).json()['token']

headers = {'Authorization': f'Token {token}'}

product_slug = requests.get(f'{BASE_URL}/api/products/').json()['results'][0]['slug']
item = requests.post(
    f'{BASE_URL}/api/cart/items/',
    json={'product_slug': product_slug, 'quantity': 1},
    headers=headers,
).json()

cart_item_id = item['id']
updated = requests.patch(
    f'{BASE_URL}/api/cart/items/{cart_item_id}/',
    json={'quantity': 3},
    headers=headers,
).json()
print(updated['quantity'])
04

Видалити один товар

#

Додайте продукт до кошика, потім видаліть його через DELETE /api/cart/items/{id}/. Перевірте, що кошик порожній, отримавши його знову та вивівши кількість товарів.

import requests

BASE_URL = 'https://apilearn.tukas.dev'

# 1. Авторизуйтеся
# 2. Додайте продукт
# 3. Видаліть цей товар
# 4. Перевірте що кошик порожній
Рішення
import requests

BASE_URL = 'https://apilearn.tukas.dev'

token = requests.post(f'{BASE_URL}/api/auth/token/', json={
    'username': 'ВАШ_ЛОГІН', 'password': 'ВАШ_ПАРОЛЬ',
}).json()['token']

headers = {'Authorization': f'Token {token}'}

product_slug = requests.get(f'{BASE_URL}/api/products/').json()['results'][0]['slug']
item = requests.post(
    f'{BASE_URL}/api/cart/items/',
    json={'product_slug': product_slug, 'quantity': 1},
    headers=headers,
).json()

requests.delete(f'{BASE_URL}/api/cart/items/{item["id"]}/', headers=headers)

cart = requests.get(f'{BASE_URL}/api/cart/', headers=headers).json()
print(len(cart['items']))
05

Додати два продукти та очистити кошик

#

Додайте два різних продукти до кошика. Виведіть загальну суму. Потім очистіть кошик через DELETE /api/cart/items/ та перевірте, що він порожній.

import requests

BASE_URL = 'https://apilearn.tukas.dev'

# 1. Авторизуйтеся
# 2. Додайте два різних продукти
# 3. Виведіть суму
# 4. Очистіть кошик
# 5. Підтвердіть що кошик порожній
Рішення
import requests

BASE_URL = 'https://apilearn.tukas.dev'

token = requests.post(f'{BASE_URL}/api/auth/token/', json={
    'username': 'ВАШ_ЛОГІН', 'password': 'ВАШ_ПАРОЛЬ',
}).json()['token']

headers = {'Authorization': f'Token {token}'}

products = requests.get(f'{BASE_URL}/api/products/').json()['results']
product_slugs = [products[0]['slug'], products[1]['slug']]

for slug in product_slugs:
    requests.post(
        f'{BASE_URL}/api/cart/items/',
        json={'product_slug': slug, 'quantity': 1},
        headers=headers,
    )

cart = requests.get(f'{BASE_URL}/api/cart/', headers=headers).json()
print('сума:', cart['total_price'])

requests.delete(f'{BASE_URL}/api/cart/items/', headers=headers)

cart = requests.get(f'{BASE_URL}/api/cart/', headers=headers).json()
print('товарів після очищення:', len(cart['items']))