Здесь я собираюсь подробно описать два момента, которые вы упомянули. Вы также можете прочитать этот ответ , в котором подробно описано использование чертежей, и проверить 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.