Python · API · Средний уровень
Заказы
Оформляйте заказы из корзины и просматривайте историю своих заказов.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Оформление и просмотр заказов
#Справочник эндпоинтов заказов
#Упражнения:
Оформить заказ
#Добавьте хотя бы один продукт в корзину, затем выполните POST к /api/orders/, чтобы оформить заказ. Выведите id заказа и статус из ответа.
import requests BASE_URL = 'https://apilearn.tukas.dev' # 1. Авторизуйтесь # 2. Добавьте продукт в корзину # 3. POST /api/orders/ и выведите 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}'}
product_slug = requests.get(f'{BASE_URL}/api/products/').json()['results'][0]['slug']
requests.post(
f'{BASE_URL}/api/cart/items/',
json={'product_slug': product_slug, 'quantity': 1},
headers=headers,
)
order = requests.post(
f'{BASE_URL}/api/orders/',
json={'phone_number': '+1234567890'},
headers=headers,
).json()
print(order['id'])
print(order['status'])
Список заказов
#Получите историю заказов из GET /api/orders/. Выведите количество заказов и id и статус каждого.
import requests BASE_URL = 'https://apilearn.tukas.dev' # GET /api/orders/ и выведите количество + каждый заказ
Решение
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}'}
data = requests.get(f'{BASE_URL}/api/orders/', headers=headers).json()
print(f'{data["count"]} заказов')
for order in data['results']:
print(f" #{order['id']} — {order['status']}")
Детали заказа
#Оформите заказ, затем получите его детали из GET /api/orders/{id}/. Выведите название, количество и цену каждого товара.
import requests
BASE_URL = 'https://apilearn.tukas.dev'
# 1. Авторизуйтесь, добавьте товары, оформите заказ
# 2. GET /api/orders/{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}'}
products = requests.get(f'{BASE_URL}/api/products/').json()['results']
for p in products[:2]:
requests.post(
f'{BASE_URL}/api/cart/items/',
json={'product_slug': p['slug'], 'quantity': 1},
headers=headers,
)
order = requests.post(
f'{BASE_URL}/api/orders/',
json={'phone_number': '+1234567890'},
headers=headers,
).json()
order_id = order['id']
detail = requests.get(f'{BASE_URL}/api/orders/{order_id}/', headers=headers).json()
for item in detail['items']:
print(item['name'], item['quantity'], item['price'])
Полный процесс заказа
#Выполните полный процесс в одном скрипте: авторизуйтесь, добавьте 3 продукта в корзину, оформите заказ, подтвердите что он есть в списке заказов, и выведите id заказа и количество товаров.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Полный процесс: авторизация → добавление 3 товаров → заказ → подтверждение в списке
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
token = requests.post(f'{BASE_URL}/api/auth/token/', json={
'username': 'ВАШ_ЛОГИН', 'password': 'ВАШ_ПАРОЛЬ',
}).json()['token']
session = requests.Session()
session.headers['Authorization'] = f'Token {token}'
products = session.get(f'{BASE_URL}/api/products/').json()['results'][:3]
for p in products:
session.post(f'{BASE_URL}/api/cart/items/', json={'product_slug': p['slug'], 'quantity': 1})
order = session.post(f'{BASE_URL}/api/orders/', json={'phone_number': '+1234567890'}).json()
order_id = order['id']
orders_list = session.get(f'{BASE_URL}/api/orders/').json()
order_ids = [o['id'] for o in orders_list['results']]
print(f'Заказ {order_id} в списке: {order_id in order_ids}')
print(f'Товаров: {len(order["items"])}')
Вычислить общую сумму затрат
#Оформите два отдельных заказа (добавьте товары, оформите, добавьте ещё, оформите снова). Затем получите все заказы и вычислите общую сумму затрат по всем заказам. Выведите сумму.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Оформите 2 заказа, затем суммируйте все затраты
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
token = requests.post(f'{BASE_URL}/api/auth/token/', json={
'username': 'ВАШ_ЛОГИН', 'password': 'ВАШ_ПАРОЛЬ',
}).json()['token']
session = requests.Session()
session.headers['Authorization'] = f'Token {token}'
products = session.get(f'{BASE_URL}/api/products/').json()['results']
# Первый заказ
session.post(f'{BASE_URL}/api/cart/items/', json={'product_slug': products[0]['slug'], 'quantity': 1})
session.post(f'{BASE_URL}/api/orders/', json={'phone_number': '+1234567890'})
# Второй заказ
session.post(f'{BASE_URL}/api/cart/items/', json={'product_slug': products[1]['slug'], 'quantity': 2})
session.post(f'{BASE_URL}/api/orders/', json={'phone_number': '+1234567890'})
orders = session.get(f'{BASE_URL}/api/orders/').json()['results']
total_spend = sum(
float(item['price']) * item['quantity']
for o in orders
for item in o['items']
)
print(f'Общая сумма: {total_spend:.2f}')