Урок 11. Community Pulse: GET/POST/PUT/DELETE эндпоинты
⚡ Кратко: REST CRUD для Community Pulse
Урок 11 — реализация полного набора REST-эндпоинтов проекта Community Pulse: чтение, создание, обновление и удаление вопросов, плюс добавление ответов со статистикой.
- GET /questions — список всех вопросов через
db.session.execute(select(Question)).scalars() - POST /questions — создать вопрос:
request.get_json()+ валидация +db.session.add()+commit() - PUT /questions/<id> — обновить текст вопроса, вернуть 200 или 400/404
- DELETE /questions/<id> — удалить вопрос, вернуть 200 или 404
- POST /responses — добавить ответ + атомарно обновить статистику
Statistic - Объект request:
args,form,json,data,files,method,headers - HTTP-статусы: 200 OK, 201 Created, 204, 400, 401, 404, 409, 500
Топ-3 ошибки: 1) Забыть db.session.commit(). 2) Не проверить data is None до обращения к ключам. 3) Использовать Query.get(id) (устарело) вместо db.session.get(Model, id).
📖 О чём этот урок
Урок 11 — продолжение разработки проекта Community Pulse. В прошлом уроке (09) мы настроили структуру проекта, Blueprints и Application Factory. Теперь задача — реализовать все рабочие эндпоинты: получать вопросы из БД, создавать новые, обновлять и удалять, а также принимать ответы от пользователей и вести статистику.
Что изучим
- GET запросы с ORM — загрузка данных из базы и сериализация в JSON
- POST запросы — получение данных из тела запроса, валидация, сохранение
- Объект
request: все ключевые атрибуты и методы - HTTP статус-коды: классификация, смысл, применение во Flask
- PUT и DELETE эндпоинты — обновление и удаление ресурсов
- Связанные эндпоинты —
add_responseс атомарным обновлениемStatistic - Современный SQLAlchemy 2.x:
db.session.get(),select(),scalars()
📚 Что повторить перед изучением
- ← Урок 10: Практикум 3 — SQLAlchemy запросы
- Урок 09: Работа над проектом (структура, Blueprints, Application Factory)
- HTTP-методы GET, POST, PUT, DELETE и их семантика
- SQLAlchemy: модели, сессия,
db.session.add(),db.session.commit() - Flask: Blueprint,
jsonify(), URL-конвертеры<int:id>
🎯 Что изучать дальше
- → Урок 12: Summary session 3 — итоговое повторение блока Flask
- Pydantic v2: схемы CategoryBase, интеграция с Flask (ДЗ 6)
- Обработка ошибок:
@app.errorhandler,abort() - Flask-Migrate:
flask db migrateпри изменении схемы - Тестирование Flask: pytest +
app.test_client()