2013-06-17 21 views
5

Bir Django tüketicisine API sunan bir Flask uygulamasına sahibim. Tüketicimde requests library'u API'ye basmak için kullanıyorum.Flask/Werkzeug istek nesnesi parametresi oluşturmak

Sorunum şudur: API'mı test ettiğimde, request.form numaralı POST verisini alıyorum ve onu (istek kitaplığı kullanarak) tüketiciden aldığımda request.data numaralı POST verisi alıyorum.

Ör Flask uygulamasında

bir API son nokta: Flask uygulamasında

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

Test API son nokta:

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

Bu iyi çalışır benim son nokta, içinde request.form doldurur.

istekleri kullanarak, benim Django uygulamasından API tüketen: Bu benim bilgi için request.form kontrol ediyorum olarak başarısız benim son nokta, içinde request.data doldurur

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

.

Bu soruyu yazarken bir düşüncem vardı; Belki json üstbilgileri request.form yerine request.data doldurulmuş mu?

Herhangi bir girdi takdir edildi.

Düzenleme - benim testine başlıkları ekleyerek çalıştı, iyi çalıştı:

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

cevap

6

Ah, yanlış bir Content-Type gönderiyordu. 'Application/x-www-form-urlencoded' olarak değiştirilince, request.form doğru olanı alır.

request.data malzeme ile doldurulur Flask/Werkzeug, according to the docs ile ne yapacağını bilmiyor.