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': '+79991234567',
},
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='+79161234567')
print(profile['phone_number'])