📝 Задания
⚡ Задания быстро
- Что возвращает
request.get_json()при отсутствии JSON в теле? - Какой статус-код у
create_questionпри успехе? - Написать выборки через
db.session.get(),select()иdb.session.scalars(). - Что происходит если забыть
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
Напишите современные варианты для каждого сценария:
# A: получить все вопросы
# B: получить вопрос по id
# C: получить первую Statistic по question_id
# D: получить активные Item, отсортированные по имени
Задание 4. Найти ошибку
В следующем коде есть несколько ошибок. Найдите их и исправьте:
@questions_bp.route('/<int:id>', methods=['PUT'])
def update_question(id):
question = db.session.get(Question, 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. Какими будут значения после сохранения?
Проверка понимания
Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.
Вопрос 1
Что важнее всего в практическом задании?
Вопрос 2
Как безопаснее двигаться в практикуме?
Вопрос 3
Что делать, если решение не совпадает с ожидаемым результатом?
Вопрос 4
Что делает @app.route() во Flask?
Вопрос 5
Почему Flask называют микрофреймворком?
Вопрос 6
Что такое веб-маршрут?