📝 Задания: Flask-проект
⚡ Топ-5 вопросов
- Какой HTTP-метод идемпотентен: POST или PUT?
- Что делает
app.register_blueprint(bp, url_prefix='/q')? - Чем
db.init_app(app)отличается отSQLAlchemy(app)? - Зачем в Pydantic v2 нужен
model_config = {"from_attributes": True}? - Что такое 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.