Что значит зарегистрировать план в приложении в Flask? - PullRequest
0 голосов
/ 04 апреля 2020

Я изучаю документацию flask и исходный код flask, чтобы глубже понять структуру. Кроме того, я прошел Что такое Flask Чертежи, точно? . Я понимаю, как blueprint помогает в модульности кода и повторном использовании функций.

Но, похоже, я не зацикливаюсь на Flask объекте приложения и что означает зарегистрировать план на нем.

В документации кода написано, что a blueprint defers the need for an application by recording them for later registrations. Кроме того, a Blueprint is an object that allows defining application functions without requiring application object ahead of time.

Я понимаю, что мы используем проект таким же образом. Например, вместо @ app.route вы используете @ bp.route, а затем регистрируете этот bp в приложении, вызывая app.register_blueprint(some_bp).

Может кто-нибудь помочь мне лучше понять его и заполнить пробел в моем понимании?

1 Ответ

2 голосов
/ 05 апреля 2020

Здесь я собираюсь подробно описать два момента, которые вы упомянули. Вы также можете прочитать этот ответ , в котором подробно описано использование чертежей, и проверить flask официальный пример на github.


план откладывает необходимость приложения, записывая их для последующей регистрации

Хорошая практика для больших приложений - использовать Application Factory . Есть несколько причин, чтобы использовать это:

  • Тестирование.
  • Несколько экземпляров.

Фабрика приложений выглядит следующим образом:

def create_app():
    app = Flask(__name__)
    return app

При запуске приложения с помощью следующих команд flask будет искать create_app и вызовите ее:

$ export FLASK_APP=myapp
$ flask run

Теперь, когда ваше приложение работает, объект приложения недоступен вне области действия функции, поскольку он будет создан во время выполнения flask run. Таким образом, вы не можете сделать в своем файле:

def create_app():
    ...

@app.route() # this does not work, because app does not exist.

Для небольших приложений или конкретных c случаев вы можете определить свой маршрут внутри create_app .

def create_app():
    app = Flask(__name__)

    @app.route("Hello")
    def hello():
        return "Hello"

    return app

Вы ясно видите проблему сейчас. Вы собираетесь создать все свои маршруты внутри уникальной функции (нечитаемые, плохие методы, ...)

Вот вам и план. Если вы создали чертежи в своем приложении (см. Пример flaskr). Вы можете зарегистрировать их в create_app при выполнении flask run. Вы можете зарегистрировать их, когда захотите в вашем create_app после некоторой инициализации расширений, некоторого кода запуска или чего-либо еще. Вы также можете выполнить динамическую c регистрацию.

def create_app():
    app = Flask(__name__)

    # apply the blueprints to the app
    from mymodule import auth, blog

    app.register_blueprint(auth.bp)
    app.register_blueprint(blog.bp)

Для второго пункта:

Blueprint - это объект, который позволяет определить приложение функционирует без предварительного запроса объекта приложения.

Как вы можете видеть выше, когда мы регистрируем план приложения. План не знает приложение.

app.register(blueprint) # blueprint is registered to the app.

# unlike extensions that need to know the app.
db.init_app(app) # initialization and the app is giving to the extension.

Blueprint может создавать маршруты без объекта приложения и может быть присоединена к существующему приложению. Таким образом, вы можете определять свои маршруты в том виде, в каком они есть в приложении, и в действительности не входить в них.

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

Документация flask действительно хорошо документирована, и все, что я объяснил, это объяснено в документации flask. Также пример flaskr является наиболее правильным способом создания базового c приложения, и есть официальное руководство для выполнения различных этапов создания flaskr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...