【问题标题】:How do I send JSON data to Django app via Python urllib?如何通过 Python urllib 将 JSON 数据发送到 Django 应用程序?
【发布时间】:2012-05-26 02:57:58
【问题描述】:

我正在尝试使用 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...")

请求似乎没有命中 Django web_app 函数,因为函数中的第一个打印没有执行!

添加: 请注意,如果我从 urllib2.request 中的请求中删除数据,那么一切都会按预期工作!!

我错过了什么?

【问题讨论】:

  • 您可以在浏览器中访问该页面吗?

标签: python django urllib


【解决方案1】:

你的 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' 是没有意义的,你可以设置它并通过传递一个 JSON 转储字符串来破坏 the requirement of urllib2;但是你应该自己解析request.body,而不是使用request.POSTapplication/json 通常用于指定响应的Content-Type

【讨论】:

  • +1,我也有一个错误的 urlconf 模式,最初是这样的 url(r'$', 'myapp.views.home') 在 $ 前面没有“^”标志。我将其更改为 r'^$' 并添加了后缀斜杠。谢谢
猜你喜欢
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多