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)
我在我的 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)