gpo*_*lek 1 python exception flask http-status-code-204
我在项目中使用Flask框架和纯json api。它仅呈现json响应,而没有html或静态文件。
我正在尝试使用自定义的http代码来实现abort()函数,在我的情况下,默认情况下未定义204(无内容)。我目前有类似的代码:
# Error define
class NoContent(HTTPException):
code = 204
description = ('No Content')
abort.mapping[204] = NoContent
def make_json_error(ex):
response = jsonify(error=str(ex))
response.status_code = (ex.code
if isinstance(ex, HTTPException)
else 500)
return response
custom_exceptions = {}
custom_exceptions[NoContent.code] = NoContent
for code in custom_exceptions.iterkeys():
app.error_handler_spec[None][code] = make_json_error
# Route
@app.route("/results/<name>")
def results(name=None):
return jsonify(data=results) if results else abort(204)
Run Code Online (Sandbox Code Playgroud)
它收到如下响应时效果很好:
127.0.0.1 - - [02/Dec/2014 10:51:09] "GET /results/test HTTP/1.1" 204 -
Run Code Online (Sandbox Code Playgroud)
但是没有任何内容。它不会呈现任何内容,甚至不会在浏览器中呈现空白白页。
我可以使用错误处理程序
@app.errorhandler(204)
def error204(e):
response = jsonify(data=[])
return response
Run Code Online (Sandbox Code Playgroud)
但它返回200个http代码。这里需要204。当我添加error204()行时:
response.status_code = 204
Run Code Online (Sandbox Code Playgroud)
它不会再次呈现任何内容。
我被困住了,我不知道这种方法在哪里出错。请帮忙。
如果从设计角度来看我的方法是错误的,请提出其他建议。
提前致谢。
| 归档时间: |
|
| 查看次数: |
3313 次 |
| 最近记录: |