我已经制作了一个网页,根据用户在POST请求中通过api提交的参数,显示Concert数据查询的结果。 Web应用程序的用户需要能够将音乐会添加到他们的音乐会列表中,或者将邀请发送给其他用户进行音乐会。这将需要将每个音乐会的信息发送回服务器,在服务器中可以将其存储在用户的模型中。
在结果列表的每个列表元素中,我有两个按钮,单击时会使用ajax调用向服务器发送带有Concert信息的POST请求。目前我只有这两个函数的shell,因为我不清楚如何为当前列表项发送数据,然后在视图中启动相应的函数。以下是我目前为客户提供的服务:
var venues = {{venues|safe}};
var dates = {{raw_dts|safe}};
var ticket_statuses = {{ticket_statuses|safe}};
var ticket_urls = {{ticket_urls|safe}};
console.log("length of artist list" + venues.length);
var $list = $("<ul class='list-group'>");
for(var i = 0; i < venues.length; i++){
$list.append("<li class='list-group-item'>Artist: {{form_artistSelect}} Location: " + venues[i].city + ', ' + venues[i].region +' Venue: ' + venues[i].name +
"Date: " + dates[i] + "tickets status: " + ticket_statuses[i] + "<br><a href = '" + ticket_urls[i] +"'" + "> ticket link</a> " + "<button id ='invite'type='button' class='btn btn-primary-outline'>Invite a friend</button> <button id = 'save' type='button' class='btn btn-primary-outline'> Save concert</button> </li>");
}
// var $resultObj = $('<div id = "inviteObj" style="margin:100px"></div>');
// $resultObj.append($divline);
$list.appendTo($("#container"));
$("#save").click(function() {
$.ajax({
url: your_url,
method: 'POST',
data: {
name: value,
click: True
}
success:function(data){
}
});
});
$("#invite").click(function() {
$.ajax({
url: your_url,
method: 'POST',
data: {
name: value,
click: True
}
success:function(data){
}
});
});
在views.py中我有一个视图函数,它处理获取JSON响应并根据它从表单请求获得的用户输入将其传递到客户端。以下是观点:
def search(request):
form = SearchForm(request.POST or None)
if form.is_valid():
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"))
#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))
#titles = [ i.get("title") for i in data]
raw_dts = json.dumps([i.get("datetime") for i in data])
#formatted_dts = [i.get("formatted_datetime") for i in data]
ticket_urls = json.dumps([i.get("ticket_url").encode("utf-8") for i in data])
ticket_statuses = json.dumps([i.get("ticket_status").encode("utf-8") for i in data])
venues = json.dumps([i["venue"] for i in data])
context = {
"form" : form,
"form_artistSelect" : form_artistSelect,
"raw_dts" : raw_dts,
"ticket_urls" : ticket_urls,
"ticket_statuses" : ticket_statuses,
"venues" : venues,
}
else:
context = {
"form" : form
}
return render(request,"searchform.html" , context)
具体来说,我有几个问题
由于此视图是我对该页面唯一的视图,我应该为每个按钮点击事件添加其他视图功能吗?另外,将每个音乐会列表项的数据发送到服务器端的python的正确方法是可以为每个用户保存吗?
答案 0 :(得分:1)
我会添加两个视图
每次点击,您都会使用该视图的正确网址,如果您不需要任何回复,该视图可以返回空的HttpResponse。 对于参数,我喜欢有时将所需的参数添加到项目的HTML中,例如
data-concert-id=venues[i].id
但也许您已经在列表项中包含了所有必需的数据。无论如何,您可以检索它们并在ajax调用的数据对象中轻松使用它们,例如:
{concert-id : $(this).attr('data-concert-id')