2012-05-18 3 views
1

python urllib를 사용하여 장고 웹 앱에 JSON 데이터를 보내려고하지만 행운이 없습니다. 이것은 내 코드입니다.Python urllib을 통해 JSON 데이터를 Django 앱에 보내려면 어떻게해야합니까?

파이썬 응용 프로그램 :

url = "http://127.0.0.1:8000/web_app" 
values = {'name':'Paul','age':12} 
jdata = {'data':values} 
data = urllib.urlencode(values) 
req = urllib2.Request(url, data, {'Content-Type':'application/json'}) 
try: 
    resp = urllib2.urlopen(req) 
    the_result = resp.read() 
except urllib2.HTTPError, e: 
    return "Reques Failed!" 

내 장고 웹 응용 프로그램 : 요청 함수의 첫 번째 인쇄가 실행되지 않기 때문에, 장고 web_app 기능을 타격 할 수 없습니다 보인다

@csrf_exempt 
def web_app(request): 
    print "In My webapp" # This never get printed! 
    data = request.POST['data'] 
    return HttpResponse("Thankyou...") 

!

추가 : note urllib2.request의 요청에서 데이터를 제거하면 모든 것이 예상대로 작동합니다 !!

내가 무엇이 누락 되었습니까?

+2

브라우저에서 페이지에 액세스 할 수 있습니까? – murgatroid99

답변

2

urlconf는 어떤 모습입니까? '^web_app/$'APPEND_SLASH=True이 기본값으로 설정되어있는 경우 "http://127.0.0.1:8000/web_app/" (접미사 슬래시에주의)을 사용해야합니다. 그렇지 않으면 Django는 /web_app/web_app/으로 리디렉션하려고 시도하고 일치하지 않으면 POST 요청을 리디렉션하는 것에 불만을 토로합니다.

또한 HTTP 요청에 'Content-Type':'application/json'을 설정하는 것은 의미가 없으므로 이것을 설정하고 the requirement of urllib2을 JSON 덤프 문자열로 전달하여 중단 할 수 있습니다. 그러나 request.POST 대신에 request.body을 혼자서 파싱해야합니다. application/json은 일반적으로 응답 Content-Type을 지정하기위한 것입니다.

+0

+1, 나 또한 나쁜 형식의 urlconf 패턴을 가졌습니다. $ 기호 앞에 "^"표시가없는 초기 URL (r '$', 'myapp.views.home')과 같았습니다. 나는 그것을 r '^ $'처럼 보이게하고 접미사를 추가했다. 감사 – gath

관련 문제