1

Python urllib を使用して JSON データを django Web アプリに送信しようとしていますが、うまくいきません。これは私のコードです。

Python アプリケーション:

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!"

私のDjango Webアプリ:

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

関数の最初の出力が実行されていないため、要求が Djangoweb_app関数にヒットしていないようです!

追加: urllib2.request のリクエストからデータを削除すると、すべてが期待どおりに機能することに注意してください!!

私は何が欠けていますか?

4

1 に答える 1

2

あなたのurlconfはどのように見えますか?'^web_app/$'デフォルトの設定のように見える場合APPEND_SLASH=Trueは、使用する必要があります"http://127.0.0.1:8000/web_app/"(サフィックスのスラッシュに注意してください)。または、一致するものがない場合、Django はリダイレクトしようとし/web_app、リクエスト/web_app/のリダイレクトについて不平を言います。POST

また、'Content-Type':'application/json'HTTP リクエストに設定しても意味がありません。これを設定して、JSON ダンプされた文字列を渡すことで urllib2 の要件を破ることができます。request.bodyただし、を使用する代わりに、自分で解析する必要がありますrequest.POSTapplication/json通常Content-Typeはレスポンスの指定用です。

于 2012-05-18T15:50:53.537 に答える