2014-04-17 6 views
3

아주 간단한 장고 서버에 간단한 게시물 요청을 보내려하고 있으며 게시물 데이터가 요청 게시물 사전에 표시되지 않고 그 대신에 왜 내 머리를 감쌀 수 없는지 요청 본문에Python 요청 Django로 게시물 요청 데이터

클라이언트 코드 :

payload = {'test':'test'} 
    headers = {'Content-type': 'application/json','Accept': 'text/plain'} 
    url = "localhost:8000" 
    print json.dumps(payload) 
    r = requests.post(url,data=json.dumps(payload),headers=headers) 

서버 코드 : 서버에 인쇄 무엇

def submit_test(request): 
    if request.method == 'POST': 
      print 'Post: "%s"' % request.POST 
      print 'Body: "%s"' % request.body 
      return HttpResponse('') 

은 다음과 같습니다

Post: "<QueryDict: {}>" 
Body: "{"test": "test"}" 

나는 헤더와 전송로 놀았습니다 똑 바른 사전으로 자료 및 아무것도는 작동하는 것을 보이지 않는다.

아이디어가 있으십니까? 감사!!

답변

7

POST 사전에는 요청 본문에서 보낸 양식 인코딩 된 데이터 만 포함됩니다. body 속성은 요청의 원시 본문을 문자열로 포함합니다. json으로 인코딩 된 데이터를 보내므로 body 속성에만 표시되고 POST에는 표시되지 않습니다.

docs에서 자세한 내용을 확인하십시오.

시도 양식 인코딩 된 데이터와 당신은뿐만 아니라 POST DICT의 값을 참조해야합니다

payload = {'test':'test'} 
url = "localhost:8000" 
requests.post(url, data=payload) 
+1

나는 그것을 시도했고 그것은 나에게 똑같은 것을주고 있었다. 거기에 신체에서 그것을 읽고 그것을 처리하는 것에 큰 문제가 있습니까? 감사! – Ryan

+1

json을 통해 서버와 통신하는 경우 body 속성에서 내용을 읽는 것이 내가 믿는 표준 방법입니다. 그것은 내가 과거에 한 일입니다. :) –

0

당신은 '다중/형상 - 인 헤더와 사용의 기본 하나에서'콘텐츠 유형 '을 제거해야합니다 데이터 '

response = client.post(
    '/some_url/', 
    data={'post_key': 'some_value'}, 
    # content_type='application/json' 
) 

당신 주석이'콘텐츠 _ '데이터는 난에 장고를 사용하도록 설정해야합니다 헤더에 사용자 에이전트를 지정

1

request.body에있을 것입니다 본문의 원시 데이터를 nterpret하고 POST 사전을 올바르게 채 웁니다. 다음은 작동해야합니다 :

payload = {'test': 'test'} 
url = "http://localhost:8000" 
headers = {'User-Agent': 'Mozilla/5.0'} 
requests.post(url, data=payload, headers=headers)