根据Flask中的请求内容类型更改响应

时间:2018-01-30 23:59:12

标签: python flask

我有一个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)

1 个答案:

答案 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(...)