gpt4 book ai didi

python - 无法在 Flask 中启用 Debug模式

转载 作者:太空狗 更新时间:2023-10-30 02:45:43 24 4
gpt4 key购买 nike

我有一个相当基本的 Flask 应用程序,但由于某种原因无法启用 Debug模式,所以每当我遇到错误时,我都会得到一个 500 页面,而不是带有回溯等的漂亮调试页面。这是我的应用程序/init.py:

from flask import Flask
from config import config


def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)

from .main import main as main_blueprint
app.register_blueprint(main_blueprint)

from .api import api as api_blueprint
app.register_blueprint(api_blueprint, url_prefix='/api/v1.0')

return app

这是我的 config.py:

import os

basedir = os.path.abspath(os.path.dirname(__file__))

class Config:
SECRET_KEY = '12345'
SQL_DRIVER = 'SQL Server Native Client 11.0'
SQL_SERVER = 'WIN8\MSSQL2K12'
SQL_DATABASE = 'LogMe'
SQL_USER = 'LogMe'
SQL_PASSWORD = 'password'

@staticmethod
def init_app(app):
pass


class DevelopmentConfig(Config):
DEBUG = True

config = {
'development' : DevelopmentConfig
}

如果其他地方碰巧出现问题,我已将整个项目发布到 GitHub 上,但我假设它在这两个文件中的某处: https://github.com/jcaine04/perf-dash/tree/master/app

最佳答案

调试器是WSGI runner的一部分; app.run() 服务器。如果您使用不同的 WSGI 服务器,您需要显式添加调试器中间件:

def create_app(config_name):
app = Flask(__name__)

# ...

if app.debug:
from werkzeug.debug import DebuggedApplication
app.wsgi_app = DebuggedApplication(app.wsgi_app, True)

return app

当您使用 Flask-Script 时,runserver 运行 Flask WSGI 开发服务器并将启用调试器。

不幸的是,引入了 Flask-Script 版本 2.0.3 a bug ;它没有正确设置新的调试标志,并且总是禁用调试器,除非您明确传递 -d 标志。这与您是否将 use_debugger 设置为 true 无关;这是因为 argparse store_true 选项的默认设置是在未选择时存储 False

解决方法是显式使用 -d 来修补 flask_script/commands.py 以提供所有 - -debug--no-debug 选项 self.use_debugger 作为默认值:

if self.use_debugger:
options += (Option('-d', '--debug',
action='store_true',
dest='use_debugger',
help="(no-op for compatibility)",
default=self.use_debugger),)
options += (Option('-D', '--no-debug',
action='store_false',
dest='use_debugger',
default=self.use_debugger),)

else:
options += (Option('-d', '--debug',
action='store_true',
dest='use_debugger',
default=self.use_debugger),)
options += (Option('-D', '--no-debug',
action='store_false',
dest='use_debugger',
help="(no-op for compatibility)",
default=self.use_debugger),)

我在两个尚未设置的选项中添加了 default=self.use_debugger

self.use_reloader 的处理也有类似的缺陷。

版本 0.6.7 和 1.0 没有这个错误;一个fix has been committed for version 2.0.4 (尚未发布)。

关于python - 无法在 Flask 中启用 Debug模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com