Flask-RESTful - возвращает пользовательский формат ответа

Я определил пользовательский формат ответа в соответствии с документацией 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.

Как мне это сделать? Документация не очень ясна по этому вопросу.

Ответ 1

Какое представление используется в запросе, тип mime заголовка Accept.

Запрос 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

Ответ 2

Просто верните объекты проверки флагов в свои методы.

Класс ответа позволяет предоставлять пользовательские заголовки (включая тип содержимого): http://flask.pocoo.org/docs/api/#response-objects