如何在Python中创建异步请求

时间:2015-12-19 15:17:13

标签: python json django asynchronous httprequest

我一直在研究一个Django应用程序,其中我有一个页面,用户可以在其中输入表格中的字符串(用于查询),该表格将使用api连接到网址以获取音乐会数据。我试图使用ajax请求url,但显然api的服务器不允许客户端请求数据,这意味着必须在python的服务器端完成。

我查看了一些SO帖子,例如this one和这个other one,但他们似乎都有解决方案,可以通过一般方式使用python或不使用框架来实现。我应该如何在Django中的服务器端请求这些数据?

编辑:

使用以下代码,由于某种原因,我收到了400错误。在视图中完成的所有操作都是基于表单输入对站点的请求。我只是测试变量是否可以连接到URL但是代码似乎确实已设置好,以便在用户单击提交时发布表单数据,因为我有另一个视图,其中包含发送电子邮件的相同结构使用表单变量,所以我不确定为什么这不起作用。

来自views.py的

功能:

def search(request):
    form = SearchForm(request.POST or None)
    if form.is_valid():
        form_artistSelect = form.cleaned_data.get("artist_select")
        form_city = form.cleaned_data.get("city")
        form_state = form.cleaned_data.get("state")
        mile_radius = form.cleaned_data.get("radius")
        print "testing"
        url = "http://api.bandsintown.com/events/search?artists[]=" + form_artistSelect + "&location=" +form_city+","+ form_state+"&radius="+ mile_radius + "&format=json&app_id=YOUR_APP_ID"
        data = json.load(urllib2.urlopen(url))
        print data
    context = {

        "form" : form
    }
    return render(request,"searchform.html" , context)

页面上使用的表单的属性

class SearchForm(forms.Form):
    artist_select = forms.CharField()
    city = forms.CharField()
    state = forms.CharField()
    radius = forms.CharField()

1 个答案:

答案 0 :(得分:1)

试试这个,我认为问题可能是网址中的无效字符:

form_artistSelect = urllib2.quote(form.cleaned_data.get("artist_select"))
form_city = urllib2.quote(form.cleaned_data.get("city"))
form_state = urllib2.quote(form.cleaned_data.get("state"))
mile_radius = urllib2.quote(form.cleaned_data.get("radius"))