为什么在创建应用实例之前访问应用路由

时间:2016-04-28 00:06:25

标签: flask

我正在阅读Flask示例,该示例从单个脚本应用程序转换为应用程序工厂,因此引入了蓝图。使用蓝图的原因是因为应用程序实例现在是在运行时创建的,而不是存在于全局范围中(就像在单个脚本应用程序中一样)。这会导致app.route装饰器在调用create_app()后存在,本书说明为时已晚。为什么在调用create_app()后app.route装饰器存在为时已晚?为什么我们要在调用create_app()之前访问路由?

1 个答案:

答案 0 :(得分:0)

编写应用工厂时,在调用工厂之前,您没有应用实例。仅在运行服务器时调用工厂,但您需要在运行服务器之前定义路径。因此,您将它们附加到蓝图上,并在工厂中在应用程序上注册蓝图。

# this would fail, app doesn't exist
@app.route('/blog/<int:id>')
def post(id):
    ...

# this works because the route is registered on the blueprint
# which is later registered on the app
blog_bp = Blueprint('blog', __name__, url_prefix='/blog')

@blog_bp.route('/<int:id>')
def post(id):
    ...

def create_app():
    app = Flask(__name__)
    ...
    app.register_blueprint(blog_bp)
    ...
    return app

# app still doesn't exist, it only exists when the server uses the factory