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 网络应用程序:

@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.POST. application/json通常用于指定Content-Type响应的。

于 2012-05-18T15:50:53.537 回答