📝 Задания: Flask-проект

⚡ Топ-5 вопросов

  1. Какой HTTP-метод идемпотентен: POST или PUT?
  2. Что делает app.register_blueprint(bp, url_prefix='/q')?
  3. Чем db.init_app(app) отличается от SQLAlchemy(app)?
  4. Зачем в Pydantic v2 нужен model_config = {"from_attributes": True}?
  5. Что такое stateless в REST?

Блок 1: HTTP и REST

Задание 1.1

Какие из перечисленных HTTP-методов являются идемпотентными? Выберите все подходящие:

  • GET
  • POST
  • PUT
  • DELETE
  • PATCH

→ Ответ

Задание 1.2

Что означает принцип stateless в RESTful API? Приведите пример, как это влияет на дизайн запросов.

→ Ответ

Задание 1.3

Разработайте таблицу маршрутов для сущности Article (статьи блога): определите URL, HTTP-метод и действие для полного CRUD.

→ Ответ

Блок 2: Конфигурация Flask

Задание 2.1

Напишите конфигурационный файл для Flask-приложения с тремя окружениями: development (DEBUG=True), testing (TESTING=True, SQLite in-memory), production (без DEBUG). Добавьте базовую настройку SQLAlchemy URI.

→ Ответ

Задание 2.2

Почему переменная окружения FLASK_ENV устарела? Какой альтернативой пользоваться в Flask 3.x?

→ Ответ

Блок 3: Blueprints и структура

Задание 3.1

Создайте Blueprint users_bp для управления пользователями с маршрутами:

  • GET /users/ — список всех
  • POST /users/ — создать
  • GET /users/<int:user_id> — получить по ID

→ Ответ

Задание 3.2

Объясните, что произойдёт, если зарегистрировать два Blueprint с одинаковым name. Как это исправить?

→ Ответ

Задание 3.3

Что такое Application Factory Pattern? В чём его преимущество перед созданием app на уровне модуля?

→ Ответ

Блок 4: Flask-SQLAlchemy

Задание 4.1

В чём разница между db = SQLAlchemy(app) и db = SQLAlchemy(); db.init_app(app)? Когда использовать каждый вариант?

→ Ответ

Задание 4.2

Напишите эндпоинт GET /questions/<id>, который возвращает 404 с JSON {"error": "Not found"}, если вопрос не существует, или сам вопрос при успехе.

→ Ответ

Блок 5: Pydantic + Flask

Задание 5.1

Зачем в Pydantic v2 нужно model_config = {"from_attributes": True}? Что происходит, если эту настройку не поставить при валидации ORM-объекта?

→ Ответ

Задание 5.2 — Практическое

Самостоятельно реализуйте Blueprint responses_bp с эндпоинтами:

  • GET /responses/ — список всех ответов
  • POST /responses/ — добавить ответ (поля: question_id, agree)

Используйте Pydantic-схему для POST. Проверьте существование question_id.

→ Ответ