2013-11-27 9 views
13

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 

私はデフォルトapplication/jsonを返すためにapplication/octet-streamタイプとput()機能を返すようにget()機能が欲しいです。

これを行うにはどうすればよいですか?この時点では、ドキュメントはあまり明確ではありません。

答えて

14

使用されるどのような表現は、要求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 
+0

この回答をありがとう、私はとても混乱していたのも不思議ではありません! – Ayrx

2

メソッド内のFlaskレスポンスオブジェクトを返すだけです。

応答クラスを使用すると、(コンテンツ・タイプを含む)カスタムヘッダを提供することを可能にする:

http://flask.pocoo.org/docs/api/#response-objects
+1

を?コードスニペットが役立ちます。 – Ayrx

+1

https://github.com/twilio/flask-restful/blob/master/flask_restful/__init__.py line 475 dispatch_requestを見て、フラスコを返すことができます。応答オブジェクト – Alex

+0

私は修正されました。ただし、カスタム表現の使用方法については説明していません。 –