21

我根据 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

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

4

3 回答 3

25

使用什么表示由请求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
于 2013-11-27T15:09:18.557 回答
4

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

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

于 2013-11-27T13:45:32.280 回答
1

除了@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 应该按原样工作。

于 2019-12-24T02:01:52.587 回答