次のように、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')
_
次のResourceクラスがあります。
_class Foo(restful.Resource):
def get(self):
return something
def put(self, fname):
return something
_
get()
関数で_application/octet-stream
_タイプを返し、put()
関数でデフォルトの_application/json
_を返します。
どうすればこれを行うことができますか?この点に関して、ドキュメントはあまり明確ではありません。
使用される表現は、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
_
メソッドでFlask応答オブジェクトを返すだけです。
応答クラスを使用すると、カスタムヘッダー(コンテンツタイプを含む)を提供できます。 http://flask.pocoo.org/docs/api/#response-objects
@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はそのまま機能するはずです。