2013-06-17 23 views
5

Mam aplikację Flask, która służy API dla konsumenta Django. Używam telefonu requests library w moim kliencie, aby uruchomić interfejs API.Flask/Werkzeug request objects z parametrem

Mój problem polega na tym, że gdy testuję mój interfejs API, otrzymuję dane POST w request.form, a kiedy uderzę go od mojego konsumenta (używając biblioteki żądań) otrzymuję dane POST w request.data.

np

API końcowym w Flask app:

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

Testowanie API końcowym w 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) 
     ... 

ta zapełnia request.form w moim punktu końcowego, który działa dobrze.

Spożywanie API z mojej aplikacji Django, wykorzystując wnioski:

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

ta zapełnia request.data w moim końcowego, która nie jak ja sprawdzanie request.form za info.

Podczas pisania tego pytania zastanawiałem się; Może nagłówki json powodują, że request.data jest zapełniany zamiast request.form?

Wszelkie dane wejściowe są mile widziane.

Edit - Próbowałem dodawanie nagłówków do mojego testu, pracował w porządku:

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

Odpowiedz

6

Ach, ja wysyłał nieprawidłowy Content-Type. Zmiana tego na "application/x-www-form-urlencoded" sprawia, że ​​request.form dostaje właściwe rzeczy.

request.data jest wypełniona materiałem Flask/Werkzeug nie wie, co zrobić z according to the docs.