Flask应用中调试标志放在哪里

10 投票
1 回答
19201 浏览
提问于 2025-04-17 19:00

在阅读Flask的文档时,我发现通常有两个地方可以设置调试标志:

  • 在创建Flask对象之后

    app = Flask(__name__)
    app.debug = True
    
  • 或者在运行方法中

    app.run(host='0.0.0.0', debug = True)
    

在我的项目中,有一个app/init.py文件:

    from flask import Flask
    app = Flask(__name__) 
    #app.debug = True       
    from app import views
    if app.debug == True:
       ...
       ...

还有一个run.py文件:

from app import app
import os
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port, debug = True)

我发现第二种方法(通过app.run)的问题是,调试标志的值(True)要等到执行运行方法时才会设置。因此,在我的init.py文件中,app.debug的默认值会是False。而第一种方法就没有这个问题。

以上说法是否正确?有没有什么我没有看到的?那么,设置调试值的最佳位置是什么,不管应用程序如何?

1 个回答

18

文档中提到 这两种方法的效果完全相同。,但这是指在Flask应用程序实际运行之后的情况。

http://flask.pocoo.org/docs/quickstart/#debug-mode

在你上面描述的情况下,最好的选择是使用第一种方法,因为你是在应用程序运行之前检查 app.debug 的值,但在它被定义并且 app.debug 被设置之后。

考虑到这一点,随着你的应用程序变得越来越大,你可能会考虑建立一个稍微更健壮的结构,在其中定义一个 config-$ENV.py 文件,里面设置了调试标志。

app/conf/config-dev.py

DEBUG = True
# ... other settings (e.g., log location, project root, etc)

app/conf/config-live.py

DEBUG = False
# ... other settings (e.g., log location, project root, etc)

app/conf/__init__.py

EMPTY FILE

app/__init__.py

from flask import Flask

def create_app(env='dev'):
    app = Flask(__name__)
    app.config.from_object('app.conf.config-%s' % env)

    if app.debug:
        print 'running in debug mode'
    else:
        print 'NOT running in debug mode'
    return app

这意味着你可以立即检查你的应用程序是否将在调试模式下运行,当你运行应用程序时,你可以告诉它在哪个环境下运行,这将决定调试是否设置为True或False。

run.py

from app import create_app
import os

port = int(os.environ.get('PORT', 5000))
app = create_app(env='dev') #Or pass 'live' to NOT be in debug mode
app.run(host='0.0.0.0', port=port)

撰写回答