2013-06-17 5 views
5

장고 사용자에게 API를 제공하는 Flask 앱이 있습니다. 내 소비자의 requests library을 사용하여 API를 사용합니다.Flask/Werkzeug 요청 개체가 매개 변수를 구성합니다.

내 문제는 다음과 같습니다. API를 테스트 할 때 request.form의 POST 데이터를 얻습니다. 소비자 (요청 라이브러리 사용)에서 데이터를 얻었을 때 request.data에 POST 데이터가 나타납니다.

예를 들면, 플라스크 응용 프로그램에서

API 엔드 포인트 : 플라스크 응용 프로그램에서

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

테스트 API 엔드 포인트 :

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

이 잘 작동 내 엔드 포인트에 request.form을 채 웁니다.

요청을 사용, 내 장고 응용 프로그램에서 API를 소모 :이 내가 정보를 request.form 확인하고 있습니다로 실패 내 엔드 포인트에 request.data 채 웁니다

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

.

나는이 질문을 쓰는 동안 생각해 봤다. 어쩌면 json 헤더가 request.form 대신에 request.data을 채우고있을 수 있습니까?

모든 의견을 감사드립니다.

편집 - 내 테스트에 헤더를 추가하는 시도, 잘 작동 :

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

답변

6

를 아, 내가 잘못된 콘텐츠 형식을 전송했다. 'application/x-www-form-urlencoded'로 변경하면 request.form이 올바른 정보를 얻습니다.

request.data에는 Flask/Werkzeug가 according to the docs과 관련이없는 것으로 채워집니다.

관련 문제