Урок 09. Работа над проектом: Community Pulse
⚡ Кратко: сборка Flask-приложения
Community Pulse — RESTful API на Flask для опросов. Анонимные пользователи создают вопросы и голосуют: «согласен» / «не согласен».
- Стек: Flask 3.x, Flask-SQLAlchemy, Alembic, Pydantic
- Blueprints: модули
questions_bpиresponses_bp— разделяют маршруты по ответственности - Application factory:
create_app()вapp/__init__.py— инициализирует расширения и регистрирует blueprints - Config: классы
Config / DevelopmentConfig / ProductionConfig— переключение через переменную окружения - HTTP методы: GET/POST/PUT/DELETE = Read/Create/Update/Delete (CRUD)
- RESTful: ресурсы доступны по URL; каждый запрос самодостаточен (stateless)
Топ-3 ошибки: 1) Забыть db.session.commit(). 2) Зарегистрировать Blueprint без url_prefix. 3) Инициализировать SQLAlchemy(app) в модуле напрямую вместо init_app().
📖 О чём этот урок
Урок 09 посвящён сборке полноценного Flask-приложения с нуля: от проектирования структуры до написания рабочих REST-эндпоинтов. В основе — учебный проект Community Pulse: платформа для анонимного голосования по общественно значимым вопросам.
Что изучим
- HTTP-методы (GET, POST, PUT, PATCH, DELETE) и идемпотентность
- Принципы REST и RESTful-архитектуры
- Конфигурация Flask: классы Config, загрузка из переменной окружения
- Роутинг: декоратор
@app.route, переменные маршрута, конвертеры типов - Blueprints — организация приложения по модулям
- Application Factory Pattern:
create_app() - Flask-SQLAlchemy: интеграция с приложением через
init_app() - Pydantic: контракты для входных/выходных данных
📚 Что повторить перед изучением
- ← Урок 08: Summary session 2 — повторение SQLAlchemy
- Урок 07: SQLAlchemy — запросы, CRUD
- Урок 03: Pydantic — валидация данных
- Понятие HTTP-методов и REST
- Основы Flask: маршруты, декораторы
🎯 Что изучать дальше
- → Урок 10: Практикум 3 — доработка Community Pulse
- Миграции с Flask-Migrate (Alembic)
- Полная интеграция Pydantic v2 с Flask-SQLAlchemy
- Обработка ошибок:
@app.errorhandler, abort() - Тестирование Flask: pytest + test_client