当前位置: 首页 > 面试题库 >

访问在应用程序工厂中定义的Flask扩展

仰成天
2023-03-14
问题内容

我正在使用应用程序工厂模式来设置我的Flask应用程序。我的应用程序使用Flask-
Babel扩展程序,该扩展程序也在工厂中设置。但是,我想以蓝图的形式访问该扩展程序以便使用它,

工厂在__init__.py

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

    babel = Babel(app)

    app.register_blueprint(main_blueprint)
    app.register_blueprint(category_blueprint)
    app.register_blueprint(item_blueprint)

    db.init_app(app)
    return app

我想添加以下内容main.py

@babel.localeselector
def get_locale():
    if 'locale' in session:
        return session['locale']
    return request.accept_languages.best_match(LANGUAGES.keys())

@application.route('/locale/<locale>/', methods=['GET'])
def set_locale(locale):
    session['locale'] = locale
    redirect_to = request.args.get('redirect_to', '/')
    return redirect(redirect_to)     # Change this to previous url

不幸的是,main.py无法babel从应用程序工厂访问变量。我应该如何解决这个问题?


问题答案:

正是这种情况下,Flask扩展被设计为无需应用程序实例即可实例化。在工厂外,定义扩展。在工厂内部,致电init_app以将应用程序与扩展名相关联。

babel = Babel()

def create_app():
    ...
    babel.init_app(app)
    ...

现在,该babel名称可以随时导入,而不仅仅是在创建应用程序之后。

您似乎已经使用db(Flask-SQLAlchemy)扩展名正确地执行了此操作。

对于您的特定babel.localeselector示例,将其放在旁边可能会更有意义,babel因为它是在此处定义的。



 类似资料:
  • 本文向大家介绍定义SAPUI5应用程序的访问元素,包括了定义SAPUI5应用程序的访问元素的使用技巧和注意事项,需要的朋友参考一下 您可以尝试使用以下代码-

  • 问题内容: 我是AngularJS的新手,觉得很有趣,但是对于以下情况我不太清楚。 我分配并使用返回数据时遇到错误,无论如何我可以将返回数据分配给吗? 问题答案: 您通常不在工厂,服务或提供商内部使用。通常,您将返回(由返回),然后在控制器(您确实有)中处理promise 。 控制器功能:

  • 问题内容: 我已经创建了一个处理身份验证的蓝图。此蓝图使用Flask-Login。并具有以下内容以及未显示的更多代码。 在蓝图中,我具有以下内容: 然后,我有一个小应用程序想要添加身份验证。 小型应用 现在我知道该蓝图的@login_required可以正常工作,因为如果打开浏览器并转到localhost:8000 /,我必须登录。 但是,如果我转到localhost:8000 / profile

  • 如果您已经开始使用包和蓝图(用蓝图实现模块化的应用)辅助您的应用开发了,那么 这里还有一些非常好的办法可以进一步的提升开发体验。当蓝图被导入的时候, 一个通用的模板将会负责创建应用程序对象。但是如果你将这个对象的创建工作 移交给一个函数来完成,那么你就可以在此后创建它的多个实例。 这么做的目的在于: 测试。你可以使用多个应用程序的实例,为每个实例分配分配不同的配置, 从而测试每一种不同的情况。 多

  • 问题内容: 我有一个现有的Flask应用程序,并且想找到通往另一个应用程序的路线。更具体地说,第二个应用程序是Plotly Dash应用程序。如何在现有的Flask应用程序中运行Dash应用程序? 我还尝试将路由添加到Dash实例,因为它是Flask应用程序,但出现错误: 问题答案: 从文档: 基本的Flask应用程序可从访问app.server。 你还可以将自己的Flask应用实例传递到Dash

  • 在本教程中,我将尝试从外部manage.py文件中获取现有的应用程序 我的应用程序结构如下: manage.py文件: 最后是文件(简化): 因此,当我尝试运行:,输出为: 无法解析从导入的配置。我试图解决这与chdir可见在manage.py. 我的环境变量是我从工作设置中获得的: 我通过替换以下内容成功通过了导入指令: 通过 但是整个项目包含从myserver开始的导入 所以最后一个问题是:为