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

Профіль користувача

5 завдань

Читайте та оновлюйте профіль користувача за допомогою GET, PATCH і PUT запитів.

GET, PATCH і PUT — коли що використовувати

#
API профілю дозволяє читати та оновлювати дані вашого облікового запису. Всі три методи використовують один і той самий ендпоінт: ``` GET /api/users/profile/ Переглянути поточний профіль PATCH /api/users/profile/ Частково оновити профіль (тільки відправлені поля) PUT /api/users/profile/ Повністю замінити профіль (всі поля обов'язкові) ``` Усі ендпоінти вимагають авторизації через заголовок Authorization. Відповідь GET повертає такі поля: ```json { "id": 1, "username": "alice42", "email": "[email protected]", "first_name": "Alice", "last_name": "Smith", "phone_number": "+1234567890", "image": null } ``` PATCH і PUT: у чому різниця? PATCH — хірургічне оновлення. Надсилайте лише поля, які хочете змінити — інші залишаться без змін: ```python # Змінити тільки ім'я session.patch('/api/users/profile/', json={'first_name': 'Alicia'}) ``` PUT — повна заміна. Потрібно надіслати всі поля, інакше пропущені поля будуть скинуті до порожнього значення: ```python # Замінити весь профіль session.put('/api/users/profile/', json={ 'username': 'alice42', 'email': '[email protected]', 'first_name': 'Alicia', 'last_name': 'Smith', 'phone_number': '+1234567890', }) ``` Для більшості оновлень використовуйте PATCH — він безпечніший, оскільки не чіпає поля, які ви не вказали.

Читання та оновлення профілю

#
Практичний приклад роботи з профілем: ```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}' PROFILE_URL = f'{BASE_URL}/api/users/profile/' # Прочитати поточний профіль profile = session.get(PROFILE_URL).json() print('Ім'я:', profile['first_name']) print('Email:', profile['email']) ``` Частково оновити через PATCH і перевірити: ```python # Змінити тільки ім'я response = session.patch(PROFILE_URL, json={'first_name': 'Alicia'}) print(response.status_code) # 200 OK # Перевірити що змінилось updated = session.get(PROFILE_URL).json() print('Нове ім'я:', updated['first_name']) # Alicia print('Email незмінний:', updated['email']) # [email protected] — не зачеплений ``` Повна заміна через PUT: ```python response = session.put(PROFILE_URL, json={ 'username': 'alice42', 'email': '[email protected]', 'first_name': 'Alicia', 'last_name': 'Johnson', 'phone_number': '+9876543210', }) print(response.status_code) # 200 OK ``` Допоміжна функція для часто вживаних оновлень: ```python def update_profile(**fields): response = session.patch(PROFILE_URL, json=fields) response.raise_for_status() return response.json() profile = update_profile(first_name='Bob', phone_number='+1112223333') print(profile['first_name']) ```

Довідник ендпоінта профілю

#
Ендпоінт профілю: ``` GET /api/users/profile/ Отримати профіль → 200 + об'єкт профілю PATCH /api/users/profile/ Часткове оновлення → 200 + оновлений профіль PUT /api/users/profile/ Повна заміна → 200 + оновлений профіль ``` Поля відповіді: ``` id int Незмінний id користувача username string Логін (унікальний) email string first_name string last_name string phone_number string Формат: +1234567890 image string URL або null ``` Порівняння PATCH і PUT: ``` PATCH Надсилайте тільки змінені поля Безпечно — нічого не скидається PUT Надсилайте всі поля Пропущені поля очищаються ``` Типова помилка при PUT: якщо забути надіслати email або username — вони можуть стати порожніми. Завжди попередньо зчитуйте поточний профіль і включайте всі поля в запит PUT.
01

Прочитати профіль

#

Авторизуйтеся і отримайте ваш профіль із 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'])
02

Оновити ім'я через 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'])
03

Оновити кілька полів

#

Через один 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'])
04

Повна заміна через 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'])
05

Допоміжна функція оновлення профілю

#

Напишіть функцію 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'])