📝 Задания
⚡ Задания быстро
- Что возвращает
request.get_json()при отсутствии JSON в теле? - Какой статус-код у
create_questionпри успехе? - Переписать
Question.query.get(id)на SQLAlchemy 2.x. - Что происходит если забыть
db.session.commit()послеdb.session.add()? - Написать эндпоинт PATCH для частичного обновления.
Задание 1. Объект request — выбрать правильный атрибут
Для каждого сценария выберите правильный атрибут / метод объекта request:
- Клиент отправил GET запрос
/items?category=books&page=2. Как получить значениеcategory? - Клиент отправил POST с телом
{"name": "Flask"}и заголовкомContent-Type: application/json. Как получить данные? - HTML-форма отправила поле
usernameчерез POST (enctype=application/x-www-form-urlencoded). Как получить значение? - Вы хотите проверить, что запрос использует метод DELETE. Как это сделать?
- Нужно получить заголовок
Authorization. Как?
Задание 2. HTTP статус-коды
Определите правильный статус-код для каждой ситуации:
- Клиент успешно создал новый вопрос через POST.
- Клиент запросил вопрос с ID=999, которого нет в базе.
- Клиент отправил POST без поля
text. - Сервер успешно вернул список всех вопросов.
- Сервер успешно удалил вопрос и не возвращает тело ответа.
- Клиент не предоставил токен аутентификации.
Задание 3. Переписать на SQLAlchemy 2.x
Переписать каждый фрагмент с Legacy API на современный:
# Фрагмент A
questions = Question.query.all()
# Фрагмент B
question = Question.query.get(id)
# Фрагмент C
stat = Statistic.query.filter_by(question_id=q_id).first()
# Фрагмент D
active = Item.query.filter(Item.active == True).order_by(Item.name).all()
Задание 4. Найти ошибку
В следующем коде есть несколько ошибок. Найдите их и исправьте:
@questions_bp.route('/<int:id>', methods=['PUT'])
def update_question(id):
question = Question.query.get(id)
data = request.get_json()
question.text = data['text'] # строка A
return jsonify({'message': 'ok'}), 200 # строка B
Задание 5. Написать эндпоинт
Напишите эндпоинт PATCH /questions/<id>, который обновляет только переданные поля (частичное обновление). Если передан text — обновить текст. Возврат: 200 с обновлённым объектом, 404 если не найден, 400 если тело пустое.
Задание 6. Логика add_response
Ответьте на вопросы по функции add_response:
- Почему важно вызвать
db.session.commit()только один раз в конце, а не после каждогоdb.session.add()? - Что произойдёт если отправить
{"question_id": 1, "is_agree": true}дважды? Какой будетagree_count? - Для вопроса с ID=1 ещё нет записи в
Statistic. Пользователь отправляетis_agree=false. Какими будут значения после сохранения?