Гайды

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-MigrateAlembic-миграции
Flask-JWT-ExtendedJWT
Flask-LimiterRate limiting
Flask-CorsCORS

Установка точечно: 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

FlaskFastAPIDjango
Минимализм, полный контрольAsync, OpenAPI из коробкиАдминка, ORM, конвенции
Много ручной сборкиТипы и скорость разработки APIКрупные CRUD-проекты

См. Быстрый старт FastAPI.


8. Чек-лист

  • Фабрика приложения create_app() для тестов и разных конфигов.
  • Не хранить секреты в коде.
  • Для крупного API рассмотреть переход на FastAPI или DRF осознанно, а не «наращивать Flask бесконечно».

Дальше: OpenAPI и контракты · тег Flask