Python · API · Середній рівень
Профіль користувача
Читайте та оновлюйте профіль користувача за допомогою GET, PATCH і PUT запитів.
Короткий вступ до теми та пояснення перед вправами (вправи нижче):
Читання та оновлення профілю
#Довідник ендпоінта профілю
#Вправи:
Прочитати профіль
#Авторизуйтеся і отримайте ваш профіль із GET /api/users/profile/. Виведіть username і email.
import requests BASE_URL = 'https://apilearn.tukas.dev' # GET /api/users/profile/ і виведіть username і email
Рішення
import requests
BASE_URL = 'https://apilearn.tukas.dev'
token = requests.post(f'{BASE_URL}/api/auth/token/', json={
'username': 'ВАШ_ЛОГІН', 'password': 'ВАШ_ПАРОЛЬ',
}).json()['token']
profile = requests.get(
f'{BASE_URL}/api/users/profile/',
headers={'Authorization': f'Token {token}'},
).json()
print(profile['username'])
print(profile['email'])
Оновити ім'я через PATCH
#Прочитайте поточний профіль, потім оновіть first_name через PATCH /api/users/profile/. Підтвердіть зміну, зчитавши профіль знову і вивівши нове first_name.
import requests BASE_URL = 'https://apilearn.tukas.dev' # 1. Авторизуйтеся # 2. Прочитайте профіль # 3. PATCH first_name # 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}'}
PROFILE_URL = f'{BASE_URL}/api/users/profile/'
before = requests.get(PROFILE_URL, headers=headers).json()
print('До:', before['first_name'])
requests.patch(PROFILE_URL, json={'first_name': 'Нове ім'я'}, headers=headers)
after = requests.get(PROFILE_URL, headers=headers).json()
print('Після:', after['first_name'])
Оновити кілька полів
#Через один PATCH-запит оновіть одночасно first_name, last_name і phone_number. Виведіть три оновлених значення.
import requests BASE_URL = 'https://apilearn.tukas.dev' # PATCH кількох полів одночасно
Рішення
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}'}
updated = requests.patch(
f'{BASE_URL}/api/users/profile/',
json={
'first_name': 'Оновлене ім'я',
'last_name': 'Оновлене прізвище',
'phone_number': '+380991234567',
},
headers=headers,
).json()
print(updated['first_name'])
print(updated['last_name'])
print(updated['phone_number'])
Повна заміна через PUT
#Прочитайте поточний профіль, збережіть всі поля, потім надішліть PUT із зміненим email. Виведіть оновлений email, щоб підтвердити зміну.
import requests BASE_URL = 'https://apilearn.tukas.dev' # PUT вимагає всі поля — спочатку прочитайте профіль!
Рішення
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}'}
PROFILE_URL = f'{BASE_URL}/api/users/profile/'
# Прочитати всі поточні поля
current = requests.get(PROFILE_URL, headers=headers).json()
# Надіслати PUT з усіма полями, оновивши email
response = requests.put(PROFILE_URL, json={
'username': current['username'],
'email': 'новий@example.com',
'first_name': current['first_name'],
'last_name': current['last_name'],
'phone_number': current['phone_number'],
}, headers=headers)
print(response.json()['email'])
Допоміжна функція оновлення профілю
#Напишіть функцію update_profile(**fields), яка відправляє PATCH до /api/users/profile/ і повертає оновлений профіль. Використайте її для оновлення двох різних полів двома окремими викликами.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Реалізуйте update_profile(**fields) і виклічте двічі
Рішення
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}'
def update_profile(**fields):
response = session.patch(f'{BASE_URL}/api/users/profile/', json=fields)
response.raise_for_status()
return response.json()
profile = update_profile(first_name='Тест')
print(profile['first_name'])
profile = update_profile(phone_number='+380661234567')
print(profile['phone_number'])