2013-06-17 8 views
5

Ich habe eine Flask App, die eine API zu einem Django Verbraucher dient. Ich benutze die requests library in meinem Verbraucher, um die API zu treffen.Flask/Werkzeug Anfrage Objekte von Parameter

Mein Problem ist dies: Wenn ich meine API testen, bekomme ich POST-Daten in request.form, und wenn ich es von meinem Verbraucher (mit Anfragen Bibliothek) bekomme ich POST-Daten in request.data.

Z. B.

API-Endpunkt in Flask App:

@mod.route('/customers/', methods=['POST']) 
def create_prospect(): 
    customer = Customer() 
    prospect = customer.create_prospect(request.form) 
    return jsonify(prospect.serialize()), 201 

Testing API-Endpunkt in Flask App:

def test_creating_prospect(self): 
    with self.app.app_context(): 
     data = {'name': 'Test company and co'} 
     response = self.client.post(self.url, data=data) 
     ... 

Diese auffüllt request.form in meinem Endpunkt, der gut arbeitet.

Verbrauchen die API von meiner Django-Applikation, Anfragen mit:

... 
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} 
data = {'name': 'Test company and co'} 
response = requests.post(url, data=data, headers=headers) 

Diese request.data in meinem Endpunkt auffüllt, die wie ich nicht bin request.form für die Informationen zu überprüfen.

Ich hatte eine Idee beim Schreiben dieser Frage; Vielleicht machen die JSON-Header request.data statt request.form?

Jeder Eingang geschätzt.

Bearbeiten - Ich habe versucht, die Header zu meinem Test hinzufügen, hat gut funktioniert:

headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} 
    response = self.client.post(self.url, data=data, headers=headers) 

Antwort

6

Ah, ich habe einen falschen Content-Type zu senden. Wenn Sie es in 'application/x-www-form-urlencoded' ändern, erhalten Sie request.form die richtigen Sachen.

request.data ist mit Sachen gefüllt Flask/Werkzeug weiß nicht, was mit according to the docs zu tun ist.

Verwandte Themen