我有一个Flask应用程序,它返回HTML页面和对API请求的JSON响应。我想根据请求的内容类型更改错误处理程序返回的内容。如果客户请求application/json
,我想返回jsonify
响应,否则我想返回render_template
响应。如何检测所请求的内容并适当更改响应?
当前的错误处理程序我只返回一个HTML响应。
def register_errorhandlers(app):
"""Register error handlers."""
def render_error(error):
"""Render error template."""
# If a HTTPException, pull the `code` attribute; default to 500
error_code = getattr(error, 'code', 500)
return render_template('{0}.html'.format(error_code)), error_code
for errcode in [401, 404, 500]:
app.errorhandler(errcode)(render_error)
答案 0 :(得分:0)
使用request.content_type
获取客户端随请求发送的内容类型。使用request.accept_mimetypes
获取客户端指示它可以在响应中接受的mimetypes。使用这些来确定要返回的内容。
from flask import request, jsonify, render_template
if request.accept_mimetypes.accept_json:
return jsonify(...)
else:
return render_template(...)