2013-11-27 10 views
13

Ho definito un formato di risposta personalizzato come indicato nella documentazione di Flask-RESTful come segue.Flask-RESTful - Restituisce il formato di risposta personalizzato

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') 

Ho la seguente classe di risorse.

class Foo(restful.Resource): 

    def get(self): 
     return something 

    def put(self, fname): 
     return something 

Voglio la funzione get() per restituire il tipo application/octet-stream e la funzione put() per restituire il default application/json.

Come faccio a fare questo? La documentazione non è molto chiara su questo punto.

risposta

14

Cosa rappresentazione viene utilizzato è determinata dalla richiesta di , il tipo MIME Accept intestazione.

Rispondere a una richiesta di application/octet-stream utilizzando la funzione binary.

Se avete bisogno di un tipo di risposta specifica da un metodo API, allora dovrete usare flask.make_response() per restituire un oggetto di risposta 'al forno pre':

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

Grazie per questa risposta, non c'è da stupirsi che fossi così confuso! – Ayrx

2

Basta restituire gli oggetti di risposta Flask nei metodi.

classe Una risposta consente di fornire le intestazioni personalizzate (compreso il tipo di contenuto): http://flask.pocoo.org/docs/api/#response-objects

+1

Come questo lavoro all'interno della classe delle risorse? Alcuni frammenti di codice saranno utili. – Ayrx

+1

Sto guardando https://github.com/twilio/flask-restful/blob/master/flask_restful/__init__.py line 475 dispatch_request ed è possibile restituire il pallone Oggetto risposta – Alex

+0

Sono corretto. Questo non spiega come usare le rappresentazioni personalizzate, comunque. –