2015-06-03 2 views
3

Я использую фабрику приложений для инициализации моего приложения. В нем я импортирую все чертежи и регистрирую их по одному. Есть ли способ, с помощью которого я могу перемещать операции импорта и регистрации в другой файл или сообщать фабрике о них без ссылки на них отдельно?Могу ли я сохранить все чертежи флажков в одном файле?

def create_app(config_filename): 
    app = Flask(__name__) 
    app.config.from_object(config_filename) 

    from app.users.models import db 
    db.init_app(app) 

    from app.users.views import users 
    from app.posts.views import posts 
    app.register_blueprint(posts, url_prefix='/posts') 
    app.register_blueprint(users, url_prefix='/users') 

    return app 

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

ответ

1

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

myapp/blueprints.py:

from app.users.views import users 
from app.posts.views import posts 

def init_app(app): 
    app.register_blueprint(users, prefix='/users') 
    app.register_blueprint(posts, prefix='/posts') 

myapp/__init__.py:

def create_app(): 
    app = Flask(__name__) 
    # ... 
    from myapp import blueprints 
    blueprints.init_app(app) 
    # ... 

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

from werkzeug.utils import import_string 

def create_app(): 
    app = Flask(__name__) 
    # ... 
    for name in ('users', 'posts'): 
     bp = import_string('myapp.{0}.views:{1}'.format(name, name)) 
     app.register_blueprint(bp, prefix='/{0}'.format(name)) 
    # ...