使用app工厂时绑定路由

Chr*_*our 4 python flask

在使用应用工厂时,如何在烧瓶中处理路线?如果blog包含应用程序所需的所有内容以及创建应用程序的管理脚本,那么您如何在路由中引用应用程序?

??? blog
    ??? manage.py 
    ??? blog
        ??? __init__.py
        ??? config.py  
        ??? routes.py
Run Code Online (Sandbox Code Playgroud)

manage.py

#!/usr/bin/env python

from flask.ext.script import Manager

manager = Manager(create_app)

# <manager commands>
# ...
# ...

manager.add_option('-c', '--config', dest='config', required=False)
manager.run()
Run Code Online (Sandbox Code Playgroud)

博客/ __ init__.py

from flask import flask
from .config import Default

def create_app(config=None):

    app = Flask(__name__)
    app.config.from_object(Default)

    if config is not None:
        app.config.from_pyfile(config)

    return app
Run Code Online (Sandbox Code Playgroud)

博客/ routes.py

@app.route()  # <-- erm, this won't work now!? 
def index():
     return "Hello"
Run Code Online (Sandbox Code Playgroud)

问题是应用程序是在包外创建的,所以如何使用这样的设置来处理路由?

lor*_*. j 6

通常我使用具有蓝图的应用工厂.

blog/__init__.py

from flask import flask
from .config import Default

def create_app(config=None):

    app = Flask(__name__)
    if config is not None:
        app.config.from_pyfile(config)
    else:
        app.config.from_object(Default)

    from blog.routes import route_blueprint
    app.register_blueprint(route_blueprint)

    return app
Run Code Online (Sandbox Code Playgroud)

blog/routes.py

from flask import Blueprint
route_blueprint = Blueprint('route_blueprint', __name__)

@route_blueprint.route()
def index():
     return "Hello"
Run Code Online (Sandbox Code Playgroud)

docs:应用工厂