30

一段时间以来,我一直在 Flask 中反对这种方法,虽然我现在似乎正在取得进展,但我刚刚发生了一些让我困惑不已的事情。这是我正在调用的方法:

@app.route('/facedata/<slug>', methods=["POST"])
def facedata(slug):
    if request.method == "POST":
        try:
            post = Post.objects.get_or_404(slug=slug)
            data = [float(item) for item in request.form.getlist('emotions[]')]
            post.face_data.append(data)
            post.save()
        except:
            traceback.print_exc(file=sys.stdout)

很长一段时间以来,我在这里遇到错误,然后会在 heroku 日志中被捕获。目前没有错误,说明它没有到达except循环,但更糟糕的是,仍然有500个错误。具体来说,我得到的 500 个错误是:

heroku[router]: at=info method=POST path=/facedata/StripedVuitton host=cryptic-mountain-6390.herokuapp.com fwd="18.111.90.180" dyno=web.2 connect=4ms service=39ms status=500 bytes=291

POST在这种方法中通过 AJAX 发送这些请求:

var slug = document.getElementById("hidden-slug").getAttribute("value");
data = {emotions: lRes};
$.ajax({
    type: "POST",
    data: data,
    url: document.location.origin + "/facedata/" + slug,
    success: function(){
        console.log("Success!");
    }
});

老实说,我只是不知道如何继续调试这个问题。毫无例外地获得追溯对我来说没有多大意义,但也许我只是天真。

如果相关的话,我在 Heroku 上的 MongoHQ 上使用 mongoengine。

4

2 回答 2

49

多亏了 pocoo google 小组中很棒的人(我后来才知道烧瓶有一个单独的列表),我终于想通了。首先,我需要在我的应用配置中打开该PROPAGATE_EXCEPTIONS选项(http://flask.pocoo.org/docs/config/#builtin-configuration-values)。

完成之后,我意识到没有从视图函数返回响应存在问题,Flask 将此方法解释为。既然是这种情况,只需添加以下内容即可解决此问题:

return jsonify(result={"status": 200})

try区块的尽头。我希望这对将来遇到类似情况的人有所帮助。

于 2013-08-05T17:17:16.950 回答
0

我有同样的问题,但根本原因与 Slater 的回应中的不同:

我正在使堆栈跟踪所在的记录器静音。确保您没有过滤掉flask.app记录器,这是异常堆栈跟踪所在的位置(请注意,这与烧瓶服务器的信息日志不同,名为app.api)。

于 2019-01-10T22:33:22.633 回答