nextel
@nextel
ненавижу javascript

Как организовать струткуру приложения для избежания циклиеских импортов?

Щлравствуйте, как организовать приложение с blueprint чтобы избежать циклических импортов?
К примеру есть файл котороый сожердит код

from flask import Flask
from flask_mail import Mail
from flask_mongoengine import MongoEngine
from core.flask_core.modules.admin.admin_bp import admin
from core.flask_core.modules.main.main_bp import main
from core.flask_core.modules.registration.registration_bp import registration
from core.flask_core.modules.news.news_bp import news
from core.flask_core.modules.test.test_bp import test
from core.flask_core.modules.login.login_bp import login
from core.flask_core.modules.ajax.ajax_bp import ajax



mail = Mail()
db = MongoEngine()



def add_blueprints(app):
    app.register_blueprint(admin, url_prefix='/admin')
    app.register_blueprint(main, url_prefix='/')
    app.register_blueprint(registration, url_prefix='/registration')
    app.register_blueprint(news, url_prefix='/news')
    app.register_blueprint(login, url_prefix='/login')
    app.register_blueprint(test, url_prefix='/test')
    app.register_blueprint(ajax, url_prefix='/ajax')



def create_app():
    app = Flask(__name__)
    mail.init_app(app)

    app.config.from_object('config')
    db.init_app(app)
    add_blueprints(app=app)
    return app


flask_app = create_app()


так вот, он импортирует блюпринты инизиализирует монго и фласк майл, и создает приложульку, а теперь вопрос, как только мы собираемся использовать монго в одном из блюпринтов мы получаем цикличесикй импорт, как этого избежать?
  • Вопрос задан
  • 2693 просмотра
Решения вопроса 1
@bromzh
Drugs-driven development
1) выносишь создание монги и других модулей в отдельный файл
2) импортируешь этот файл внутри create_app и инициализируешь его
3) в блюпринтах импортируешь по-обычному
4) создай какой-нибудь run.py, в котором импортитшь create_app, создаёшь и запускаешь приложуху
5) ...
6) PROFIT

# app.py
def create_app():
    app = Flask(__name__)
    app.config.from_object('config')

    from mail import mail
    mail.init_app(app)
  
    from models import db
    db.init_app(app)
    add_blueprints(app=app)
    return app

# models.py
from flask.ext.mongoengine import MongoEngine
db = MongoEngine()

# mail.py
from flask.ext.mail import Mail
mail = Mail()

# run.py
from app import create_app
app = create_app()
if __name__ == '__main__':
    app.run()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы