Как делить флеш-приложение на несколько файлов py?

В настоящее время мое приложение-фляга состоит из одного файла test.py с несколькими маршрутами и определенного маршрута main(). Есть ли способ создать файл test2.py, который содержит маршруты, которые не обрабатывались в test.py?

@app.route('/somepath')
def somehandler():
    # Handler code here

Я обеспокоен тем, что в test.py слишком много маршрутов, и я хотел бы сделать так, чтобы я мог запускать python test.py, который также будет собирать маршруты на test.py, как если бы он был частью того же файл. Какие изменения я должен внести в test.py и/или включить в test2.py, чтобы заставить это работать?

Ответ 1

Вы можете использовать обычную структуру пакетов Python, чтобы разделить ваше приложение на несколько модулей, увидеть документы Flask.

Однако

Flask использует концепцию чертежей для создания компонентов приложения и поддержки общих шаблонов в приложении или между приложениями.

Вы можете создать подкомпонент вашего приложения в качестве Blueprint в отдельном файле:

simple_page = Blueprint('simple_page', __name__, template_folder='templates')
@simple_page.route('/<page>')
def show(page):
    # stuff

И затем используйте его в основной части:

from yourapplication.simple_page import simple_page

app = Flask(__name__)
app.register_blueprint(simple_page)

Чертежи могут также связывать определенные ресурсы: шаблоны или статические файлы. Пожалуйста, обратитесь к фляжным документам для всех деталей.

Ответ 3

Разделение приложения на чертежи - отличная идея. Однако, если этого недостаточно, и если вы хотите разделить сам Blueprint на несколько файлов py, это также возможно с помощью обычной системы импорта модулей Python, а затем перебирать все маршруты, которые импортируются из других файлов.

Я создал Gist с кодом для этого:

https://gist.github.com/Jaza/61f879f577bc9d06029e

Насколько мне известно, это единственный возможный способ разделить Blueprint на данный момент. Невозможно создать "под-чертежи" в Flask, хотя проблема открыта с большим обсуждением об этом:

https://github.com/mitsuhiko/flask/issues/593

Кроме того, даже если бы это было возможно (и, вероятно, он мог бы использовать некоторые фрагменты из этого потока проблем), суб-чертежи могут быть слишком ограничительными для вашего варианта использования в любом случае - например. если вы не хотите, чтобы все маршруты в подмодуле имели один и тот же префикс URL.