【问题标题】:Flask-RESTful - Return custom Response formatFlask-RESTful - 返回自定义响应格式
【发布时间】:2013-12-13 04:14:03
【问题描述】:

我已经根据 Flask-RESTful 文档定义了一个自定义响应格式,如下所示。

app = Flask(__name__)
api = restful.Api(app)

@api.representation('application/octet-stream')
def binary(data, code, headers=None):
    resp = api.make_response(data, code)
    resp.headers.extend(headers or {})
    return resp

api.add_resource(Foo, '/foo')

我有以下资源类。

class Foo(restful.Resource):

    def get(self):
        return something

    def put(self, fname):
        return something

我希望get() 函数返回application/octet-stream 类型,而put() 函数返回默认application/json

我该怎么做呢?文档在这一点上不是很清楚。

【问题讨论】:

    标签: python python-2.7 flask flask-restful


    【解决方案1】:

    只需在您的方法中返回 Flask 响应对象。

    响应类允许您提供自定义标头(包括内容类型): http://flask.pocoo.org/docs/api/#response-objects

    【讨论】:

    • 这将如何在 Resource 类中工作?一些代码 sn-ps 会有所帮助。
    • 我正在查看 github.com/twilio/flask-restful/blob/master/flask_restful/… 第 475 行 dispatch_request 并且可以返回烧瓶响应对象
    • 我的立场是正确的。然而,这并没有解释如何使用自定义表示。
    【解决方案2】:

    使用什么表示由 request 决定,Accept 标头 mime 类型。

    application/octet-stream 的请求将通过您的 binary 函数得到响应。

    如果您需要 API 方法的特定响应类型,则必须使用 flask.make_response() 来返回“预烘焙”响应对象:

    def get(self):
        response = flask.make_response(something)
        response.headers['content-type'] = 'application/octet-stream'
        return response
    

    【讨论】:

      【解决方案3】:

      除了@Martijin Pieters 在这里的回答 - https://stackoverflow.com/a/20246014/1869562。在您返回原始响应对象的地方,Flask-Restful 还允许您直接在返回值中设置状态代码和标头。

      所以在你的情况下,这也应该有效

      class Foo(restful.Resource):
      
          def get(self):
              return something, 201, {'content-type': 'application/octet-stream'}
      

      Flask-REstful 的默认媒体类型是 'application/json',所以 put 应该按原样工作。

      【讨论】:

      • 我尝试使用它但仍然收到TypeError: Object of type bytes is not JSON serializable
      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 2019-09-20
      • 2021-05-10
      • 2018-02-02
      • 2019-07-23
      • 1970-01-01
      相关资源
      最近更新 更多