Flask为什么不给我提供交互式调试器? - python

这是一个简单的Flask应用,出现语法错误(应为sys.version,而不是sys.version()

from flask import Flask, url_for, request, render_template
import sys

app = Flask(__name__)
app.config.from_object(__name__)

@app.route('/')
def index():
    version = sys.version()
    return "This is the index page.  Python version info: {}".format(version)

if __name__ == '__main__':
    app.run(debug=True)

当我在本地运行它并尝试访问http://localhost:5000时,我得到了不错的Werkzeug调试器:

Flask为什么不给我提供交互式调试器? - python

但是当我在远程服务器(Apache 2.4.17,mod_wsgi 4.4.21)上运行它时,我只得到一个通用的500错误页面:

Flask为什么不给我提供交互式调试器? - python

我已经尝试了各种方法来使这项工作:

app.debug = True之后设置app = Flask(__name__)
基于this link,我也尝试添加以下代码:

from werkzeug.debug import DebuggedApplication
application = DebuggedApplication(app, True)

但似乎无济于事。

我知道调试器无法在派生环境中工作,但是根据this link,mod_wsgi的默认模式是不派生。我的Apache配置为:

WSGIDaemonProcess flasktest user=david group=devgrp threads=1 python-path=/apps/www/80/wsgi-scripts/FlaskTest:/apps/.virtualenvs/flasktest/lib/python3.4/site-packages

那为什么不能得到漂亮的调试器呢?

编辑:这是我添加的修改后的文件(不起作用)

from flask import Flask
import sys

app = Flask(__name__)
app.config.from_object(__name__)
app.debug = True

from werkzeug.debug import DebuggedApplication
application = DebuggedApplication(app, True)  

@app.route('/')
def index():   
    version = sys.version()
    return "This is the index page.  Python version info: {}".format(version)

if __name__ == '__main__':
    app.run(debug=True)   

参考方案

要将WSGI中间件添加到Flask应用程序中,请包装并替换该应用程序的wsgi_app属性。对于调试中间件,还应设置app.debug = True,以使Flask不会将异常转换为500个响应。

app.debug = True
app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True)

在公共服务器上运行调试器存在安全风险。尽管最近的更改要求在运行代码之前先输入PIN,但调试器可能仍会以无法预见的方式变得不安全。通常,您可以通过使用日志记录获取有关生产中错误的信息。 This answer是有关如何进行设置的很好的基本摘要。

如果您已替换app而不是调用application,则该方法可能会起作用。 mod_wsgi可能在app之前接了application,因此它仍在运行原始应用程序。虽然仍然建议包装app.wsgi_app

45码

python flask如何从URL获取路由ID - python

我正在用烧瓶。我有一个网址,例如:http://example.com/page/page_id我想知道如何从路线中的网址获取page_id部分。我希望我可以设计出一些方法,例如:@route('/page/page_id') def page(page_id): pageid = page_id 参考方案 这非常简单-在尖括号之间传递p…

Python Eve包含过滤器 - python

有什么方法可以返回字段包含某些值的项目?例如。GET /people?contains="foo"返回名称中带有“ foo”一词的所有人。提前致谢 参考方案 您可以使用mongodb $regex运算符,该运算符在Eve(MONGO_QUERY_BLACKLIST = ['$where', '$regex&#…

Flask Cors无法运作 - python

我正在尝试在Flask应用程序中启用CORS,但无论我把来源如何,似乎总是可以从浏览器访问URL。我不知道我做错了什么。这是我的代码from flask import Flask, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app, resources={r'/*&…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

flask:异常后停止服务器 - python

我想在发生未处理的异常时立即停止我的Flask服务器。这是一个例子:from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): 1/0 # argh, exception return 'Hello World!' i…