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

7

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

我知道可以返回一个带有状态码的字符串。

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

但是这样设置body后,我想把HTTP状态文本从“INTERNAL SERVER ERROR”更改为“休息中,请稍后再试”。

在Flask/Werkzeug中好像没有这种可能。任何地方都没有提到过。但是也许我漏了些什么?

3个回答

7

以下代码适用于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
simple and sweet - sba
这对我不起作用。Flask总是将状态字符串重置为原始值,例如“NOT FOUND,BAD REQUEST,...” - eval
如果您正在使用HTTP/2,则不支持状态消息(仅发送数字)。来源 - TheTechRobo the Nerd

0

我对此并不是专家,但恐怕只能通过猴子补丁来实现。

Flask返回werkzeug Response对象,而状态码原因似乎在http.py硬编码

同样,一些猴子补丁可能足以为您的应用程序更改这个问题。


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"

运行正常。

对于误解感到抱歉。


我在那份文件中没有看到任何关于HTTP状态文本的提及。 - sba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接