我可以为我的 Flask 应用程序工厂使用 app.py 而不是 __init__.py 吗?

Can I use app.py instead of __init__.py for my Flask application factory?

我有一个 Flask 应用程序,大致结构如下:

my_app/
   __init__.py  # Contains create_app()
   utils/
       __init__.py  # Useful functions

other_stuff.py

一切正常,但是当我在 other_stuff.pyimport my_app.utils 时,它还在 __init__.py 中执行一些特定于 Flask 的代码,这对我的用例来说有点不受欢迎。

所以,我将 __init__.py 重命名为 app.py 并将环境变量 FLASK_APP=my_app 重命名为 FLASK_APP=my_app.app

my_app/
   app.py  # Contains create_app()
   utils/
       __init__.py  # Useful functions

other_stuff.py

一切似乎都很好。然而,这个结构在 Flask 文档或任何教程中都没有提到。

有什么理由使用这种方法吗?

(另外,create_app() 应该使用 app = Flask('my_app') 还是 app = Flask('my_app.app')?)

不,你没有理由做不到。

不过,如果您的应用包含依赖于烧瓶和不依赖于烧瓶的位,您可能会考虑将烧瓶位完全放在不同的包中:

my_app/
  __init__.py
  some_other_web_stuff.py
my_tools/
  __init__.py

或者也许

my_app/
  web/
    __init__.py
    some_other_web_stuff.py
  utils/
    __init__.py