无法在Flask中启用调试模式

jca*_*e04 5 python flask

我有一个相当基本的Flask应用程序,但由于某种原因调试模式不会启用,所以每当我得到一个错误,我得到一个500页而不是带回溯的好的调试页面和所有这些.这是我的app/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
Run Code Online (Sandbox Code Playgroud)

这是我的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
}
Run Code Online (Sandbox Code Playgroud)

我已经在GitHub上发布了整个项目,如果在其他地方发生了问题,但我认为这是在这两个文件中的某个地方:https: //github.com/jcaine04/perf-dash/tree/master/app

Mar*_*ers 6

调试器是WSGI运行器的一部分; 该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
Run Code Online (Sandbox Code Playgroud)

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

不幸的是,Flask-Script版本2.0.3引入了一个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),)
Run Code Online (Sandbox Code Playgroud)

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

处理self.use_reloader同样有缺陷.

版本0.6.7和1.0不会受此错误的影响; 一个修复一直致力于为2.0.4版(还未发布).