Flask('application') 与 Flask(__name__)
Posted
技术标签:
【中文标题】Flask(\'application\') 与 Flask(__name__)【英文标题】:Flask('application') versus Flask(__name__)Flask('application') 与 Flask(__name__) 【发布时间】:2017-01-16 13:30:30 【问题描述】:在官方Quickstart中,建议使用单个模块时使用__name__
:
... 如果您使用单个模块(如本例所示),则应使用
__name__
,因为这取决于它是否以 应用程序或作为模块导入名称将不同 ('__main__'
与实际导入名称相比)。 ...
但是,在他们的API document 中,当我的应用程序是包 时,建议使用硬编码:
所以重要的是你在那里提供什么。如果您使用单 模块,
__name__
始终是正确的值。如果你是 使用包,通常建议硬编码你的名字 在那里打包。
我可以理解为什么硬编码我的包的名称会更好,但为什么不硬编码单个模块的名称呢?或者,换句话说,当Flask
接收到__main__
作为它的第一个参数时,它可以得到什么信息?我看不出这如何让 Flask 更容易找到资源......
【问题讨论】:
【参考方案1】:__name__
只是获取应用定义位置的导入名称的便捷方式。 Flask 使用导入名称知道在哪里查找资源、模板、静态文件、实例文件夹等。使用包时,如果您在 __init__.py
中定义您的应用程序,那么 __name__
仍将指向“正确”相对于资源所在的位置。然而,如果你在别处定义它,比如mypackage/app.py
,那么使用__name__
会告诉Flask 寻找与mypackage.app
相关的资源,而不是mypackage
。
使用__name__
与“硬编码”并不正交,它只是使用包名称的快捷方式。而且也没有理由说名称应该是基础包,这完全取决于您的项目结构。
【讨论】:
以上是关于Flask('application') 与 Flask(__name__)的主要内容,如果未能解决你的问题,请参考以下文章
flask强大的第三方组件之falsk-sqlalchemy