在Flask响应中设置HTTP状态文本

时间:2017-10-18 08:27:50

标签: python http flask

如何在Flask中为响应设置HTTP状态文本?

我知道我可以返回一个状态码为

的字符串
@app.route('/knockknock')
def knockknock():
    return "sleeping, try later", 500

但这设置了正文,我想更改来自"内部服务器错误"去睡觉,稍后再尝试"。

看起来这在Flask / Werkzeug中是不可能的。它没有在任何地方提到过。但也许我错过了什么?

3 个答案:

答案 0 :(得分:1)

以下内容适用于Flask。 Flask可以在返回响应时使用状态代码或描述。描述显然也可以包含代码(从客户端来看它是相同的)。但请注意,这不会从Flask端生成默认错误描述。

from flask import Flask
app = Flask(__name__)

@app.route('/knockknock')
def knockknock():
    return "", "500 sleeping, try later"

这是curl命令的输出,

curl -i http://127.0.0.1:5000/knockknock

HTTP/1.0 500 sleeping, try later
Content-Type: text/html; charset=utf-8

答案 1 :(得分:0)

也许这个文档会有所帮助,您可以自定义自己的错误页面。

http://flask.pocoo.org/docs/0.12/patterns/errorpages/

通过查看源代码,在app.py中可以找到

if status is not None:
        if isinstance(status, string_types):
            rv.status = status
        else:
            rv.status_code = status

所以使用

@app.route('/test')
def tt():
    return "status error", "500 msg"

的工作原理。

抱歉误会。

答案 2 :(得分:0)

我不是这方面的专家,但我担心这只能通过monkeypatching实现。

Flask返回werkzeug Response个对象,似乎http.py中的状态代码原因为hardcoded

同样,一些monkeypatching可能足以为你的应用程序改变它。