【问题标题】:How to make asynchronous Requests in Python如何在 Python 中发出异步请求
【发布时间】:2015-12-19 15:17:13
【问题描述】:

我一直在开发一个 Django 应用程序,其中我有一个页面,用户可以在其中输入表单中的字符串(用于查询),该表单将使用 api 连接到 url 以获取音乐会数据。我尝试使用 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()

【问题讨论】:

  • Django 是一个服务器端框架。如果需要使用 Python 作为 Web 客户端,则需要使用 Python 提供的通用工具——Django 不提供任何东西来充当客户端。
  • 您能否详细说明您希望以何种方式实现它,从而使您需要使用异步请求?我了解您想为用户提供什么,但不了解您正在考虑使用的解决方案。
  • “显然 api 的服务器不允许客户端请求数据”是什么意思?它是如何防止这种情况的?你看到了什么错误?
  • @dyeray 我刚刚用我迄今为止尝试过的内容更新了帖子
  • 你几天前也问过similar question。为什么不直接悬赏这个问题而不是重复发布?

标签: python json django asynchronous httprequest


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答!似乎 POST 正在成功进行。我目前没有看到 JSON 响应,但我可能可以通过在发出请求后弄乱变量来显示它。
  • 其实 nvm 正在打印响应!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多