Flask - 使 `abort` 使用纯文本

Flask - make `abort` use plain text

我在我的 API 方法中使用 Flask 的 abort 函数来提前停止执行并 return 一个错误:

abort(404, errMsg)

预格式化 HTML 模板中的 returns errMsg

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>(errMsg)</p>

但是,由于我正在构建 API,而不是网页,因此我希望将错误 [​​=27=] 编辑为纯文本。我看过 custom error pages 上的文档页面,但我宁愿为每个错误重新定义 abort 一次 ,而不必为每个错误代码定义它。有办法吗?

您可以将 werkzeug.exceptions.HTTPException.get_body(用于格式化 HTML 的方法)更改为您自己的 get_body 函数和 return 纯文本。
而且为用户更改错误信息仍然很容易。

from flask import Flask, abort
import werkzeug.exceptions


def get_body(self, environ=None, scope=None):
    return f'{self.code}, {self.name}, {self.description or ""}'


werkzeug.exceptions.HTTPException.get_body = get_body

app = Flask(__name__)


@app.route('/')
def home():
    abort(404)


@app.route('/nothome')
def not_home():
    abort(500, 'some server error happened')


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

您可以向 abort 提供一个 Response 对象,而不是重新定义内部 werkzeug 类:

from flask import abort as fabort

def abort(status_code, message):
    response = make_response(f'{status_code}\n{message}')
    response.status_code = status_code
    fabort(response)