【发布时间】: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