Сообщить об ошибке.

Пример структуры приложения Flask как пакета Python.

Создание больших веб-приложений на Flask.

Представьте себе простую структуру веб-приложения Flask, которая выглядит следующим образом:
/yourapplication
    yourapplication.py
    /static
        style.css
    /templates
        layout.html
        index.html
        login.html
        ...
Хотя это нормально для небольших приложений, но для больших приложений рекомендуется использовать пакет Python вместо модуля.
Чтобы преобразовать это приложение-модуль в более крупный веб-проект на Flask, необходимо создать новую папку для приложения, внутри существующей и все переместить в неё. Затем переименовать файл yourapplication.py в __init__.py. Обязательно сначала удалите все файлы .pyc, иначе все сломается.
Должно получиться что-то вроде этого:
/yourapplication
    /yourapplication
        __init__.py
        /static
            style.css
        /templates
            layout.html
            index.html
            login.html
            ...
Как теперь запустить приложение? Если запустить python3 yourapplication/__init__.py, то работать ничего не будет. Скажем так, Python не хочет, чтобы модули пакета запускались как обычные Python файлы. Но это не проблема, просто добавим новый файл с именем setup.py рядом с внутренней папкой приложения со следующим содержимым:
from setuptools import setup

setup(
    name='yourapplication',
    packages=['yourapplication'],
    include_package_data=True,
    install_requires=[
        'flask',
    ],
)
Теперь, что-бы запустить приложение, нужно экспортировать переменную среды, которая сообщит Flask, где найти экземпляр приложения:
# bash Linux 
$ export FLASK_APP=yourapplication

# CMD Windows 
> set FLASK_APP=yourapplication
Если вы находитесь за пределами каталога проекта, убедитесь, что указали точный путь к каталогу запускаемого приложения. Точно так же можно включить функции разработки:
# bash Linux 
$ export FLASK_ENV=development

# CMD Windows 
> set FLASK_ENV=development
Чтобы установить и запустить приложение, необходимо выполнить следующие команды:
$ pip install -e .
$ flask run
Что мы от этого выиграли? Теперь можно реструктурировать приложение на несколько модулей. Единственное, что надо запомнить, это следующий контрольный список:
  • Создание объекта приложения Flask должно быть в файле __init__.py. Таким образом, каждый модуль может безопасно импортировать его, а переменная __name__ будет преобразована в правильный пакет.
  • Все функции-представления (те, что с декоратором @app.route() наверху) должны быть импортированы в файл __init__.py. Не сам объект функции, а модуль, в котором они находятся. Модуль с функциями-представлениями импортируется после создания объекта приложения app.
Пример __init__.py:
from flask import Flask
app = Flask(__name__)

from yourapplication import views
А вот как будет выглядеть views.py - модуль с функциями-представлениями:
from yourapplication import app

@app.route('/')
def index():
    return 'Hello World!'
Теперь структура проекта будет выглядеть как-то так:
/yourapplication
    setup.py
    /yourapplication
        __init__.py
        views.py
        /static
            style.css
        /templates
            layout.html
            index.html
            login.html
            ...

Циклический импорт.

Циклический импорт, это когда два модуля зависят друг от друга, любой программист Python ненавидит такое поведение, но он здесь присутствует. В нашем случае views.py зависит от __init__.py. Имейте в виду, что в целом - это плохая идея, но в данном случае это нормально. Причина этого в том, что приложение не использует функции-представления в __init__.py, а просто обеспечиваем импорт модуля и делает это в нижней части файла.
С таким подходом все еще есть некоторые проблемы, но использовать декораторы @app.route() в качестве маршрутизации, то их нет.

Работа со схемами blueprint.

Если пишите еще более крупные приложения, то рекомендуется разделить их на более мелкие группа, где каждая группа реализуется с помощью схемы blueprint. Для введения в эту тему обратитесь к разделу "Модульные приложения на схемах blueprint во Flask".