使用Django发出HTTP请求并反序列化输出

时间:2013-01-03 16:55:19

标签: django http request

所以我对整个Web开发几乎都是全新的,但是已经被投入到使用Django从Web服务中提取和解析数据的一个侧面项目中,并且正在努力理解事情是如何工作的,即使在寻找通过Django文档。

在Django中,我已经完成了所有设置并在基本级别工作(使用模板,显示的页面显示“Hello World”)。

现在,为了从webservice中提取数据,我需要向以下格式的URL发出请求:

http://wbsapi.withings.net/[service_name]?action=[action_name]&[parameters]

在提供的PHP示例中,他们使用cURL,然后使用json_decode。

如何从Django中获取类似功能?提前谢谢!

2 个答案:

答案 0 :(得分:8)

您可以使用urllib2json标准模块(或者,优秀的库requestsjson):

import urllib2
import json

url = 'http://wbsapi.withings.net/[service_name]?action=[action_name]&[parameters]'
serialized_data = urllib2.urlopen(url).read()

data = json.loads(serialized_data)

如果您想在页面上使用它,则需要view associate with an url,{{3}}。

您的urls.py将包含类似

的内容
from django.conf.urls import patterns, url, include

urlpatterns = patterns('',
    (r'^get_data/$', 'myapp.views.get_data'),
)

您的myapp/views.py将包含类似

的内容
from django.http import HttpResponse
import urllib2
import json

def get_data(request):
    url = 'http://wbsapi.withings.net/[service_name]?action=[action_name]&[parameters]'
    serialized_data = urllib2.urlopen(url).read()

    data = json.loads(serialized_data)

    html = "<html><body><pre>Data: %s.</pre></body></html>" % json.dumps(data, indent=2)

    return HttpResponse(html)

当然,我不知道您希望如何显示数据,所以我再次将其序列化:)

答案 1 :(得分:0)

虽然可以在Django中实现这种功能,但还是涉及到许多中间步骤。首先,您应该考虑如何使用Python来查询Web服务。为此,我强烈推荐the Requests module,这对此很有帮助。