📜 Как показано в исходном PDF (и в большинстве туториалов)
# app.py — всё в одном файле
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run(debug=True)
Что здесь происходит: создаём глобальный объект app, навешиваем на него маршруты, запускаем. Это просто и понятно для первого знакомства.
❌ Почему этот подход может быть не лучшим сейчас
- Глобальное состояние: объект
appсоздаётся при импорте модуля. Это мешает тестированию — нельзя легко создать второй экземпляр приложения с другой конфигурацией. - Циклические импорты: при росте проекта часто возникают ситуации, когда
views.pyимпортируетappизapp.py, аapp.pyимпортируетviews.py. - Сложность конфигурации: конфигурацию приходится загружать до создания
app, что не всегда удобно. - Масштабирование: при переходе на WSGI-сервер (gunicorn) глобальный
appможет вызвать проблемы с импортами.
✅ Рекомендуемый современный вариант: Application Factory
# app/__init__.py
from flask import Flask
def create_app(config_name='development'):
app = Flask(__name__)
app.config.from_object(f'config.{config_name}')
from . import routes
app.register_blueprint(routes.bp)
return app
# app/routes.py
from flask import Blueprint
bp = Blueprint('main', __name__)
@bp.route('/')
def hello():
return 'Hello, Flask!'
# run.py
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
Что улучшилось:
- Нет глобального состояния: приложение создаётся функцией
create_app()по требованию. - Легко тестировать: в тестах можно создать
create_app('testing')с отдельной конфигурацией. - Blueprints: маршруты разбиваются на модули, избегая циклических импортов.
- Гибкость конфигурации: конфигурация передаётся при создании приложения.
Преимущества Application Factory:
- Проще тестировать (создаём приложение с тестовой конфигурацией).
- Проще масштабировать (добавляем Blueprints, расширения).
- Избегаем циклических импортов.
- Соответствует рекомендациям Flask документации.
🕰️ Когда старый подход ещё можно встретить
Старый подход (всё в одном файле) до сих пор встречается в:
- Учебных туториалах и курсах (включая текущий PDF) — для простоты восприятия.
- Прототипах и скриптах «на коленке».
- Микросервисах с 2-3 эндпоинтами, где factory — избыточность.
Как мигрировать: начните с одного файла, как в уроке. Когда проект вырастет до 5+ маршрутов, разделите на factory + blueprints.