Гайды
Flask: минималистичный веб-фреймворк и расширения
Blueprint, конфиг из env, Flask-SQLAlchemy и Migrate, ошибки и сравнение с FastAPI и Django.
~9 мин чтения
Flask: минималистичный веб-фреймворк и расширения
Flask — микрофреймворк: ядро маленькое, функциональность наращивается расширениями (БД, миграции, формы, JWT). Подходит для небольших сервисов и API, где не нужна «батарейка» Django. Сравнение стеков — Django: первый проект; ORM в Python отдельно — SQLAlchemy.
1. Минимальное приложение
bash
pip install flask
python
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.get("/health")
def health():
return jsonify(status="ok")
@app.post("/echo")
def echo():
return jsonify(body=request.get_json(silent=True))
bash
flask --app hello run --debug
2. Blueprint (модули маршрутов)
python
from flask import Blueprint
bp = Blueprint("items", __name__, url_prefix="/items")
@bp.get("/")
def list_items():
return jsonify(items=[])
# app.py
app.register_blueprint(bp)
3. Конфигурация
python
app.config.from_prefixed_env() # FLASK_SECRET_KEY, FLASK_*
app.config.from_mapping(SECRET_KEY="dev")
В проде — SECRET_KEY, SESSION_COOKIE_SECURE, переменные окружения.
4. Популярные расширения
| Расширение | Назначение |
|---|---|
| Flask-SQLAlchemy | Интеграция SQLAlchemy |
| Flask-Migrate | Alembic-миграции |
| Flask-JWT-Extended | JWT |
| Flask-Limiter | Rate limiting |
| Flask-Cors | CORS |
Установка точечно: pip install flask-sqlalchemy flask-migrate.
5. SQLAlchemy + Migrate (скелет)
python
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///app.db"
db = SQLAlchemy(app)
Migrate(app, db)
bash
flask db init
flask db migrate -m "init"
flask db upgrade
Подробнее про SQLAlchemy и Alembic — SQLAlchemy в Python и Alembic.
6. Обработка ошибок
python
@app.errorhandler(404)
def not_found(e):
return jsonify(error="not found"), 404
Или register_error_handler.
7. Когда Flask, а когда FastAPI/Django
| Flask | FastAPI | Django |
|---|---|---|
| Минимализм, полный контроль | Async, OpenAPI из коробки | Админка, ORM, конвенции |
| Много ручной сборки | Типы и скорость разработки API | Крупные CRUD-проекты |
8. Чек-лист
- Фабрика приложения
create_app()для тестов и разных конфигов. - Не хранить секреты в коде.
- Для крупного API рассмотреть переход на FastAPI или DRF осознанно, а не «наращивать Flask бесконечно».
Дальше: OpenAPI и контракты · тег Flask