我有一个在http://localhost:8000
运行localy的Django服务器,其视图设置为网址/register/
。
我有一个带有表单的html文件。视图正确显示。但是当我按下一个按钮时,应该生成一个POST请求,但是Django没有收到任何请求。
我不知道我是否设置了错误的主机来发帖或者我遇到了不同的麻烦,因为当我在Firefox的Windows上测试jsFiddle时,我可以看到带有Firebug的POST;但如果我在Ubuntu上使用Firefox& Firebug,在我运行Django的虚拟机上,Firebug不会捕获任何POST请求。
#views.py
def formExample1(request):
print 'RECEIVED REQUEST: ' + request.method
if request.method == 'POST':
startHour = request.REQUEST['starthour']
endHour = request.REQUEST['endhour']
return HttpResponseRedirect('http://www.google.es')
else: #GET
return render(request, 'formExample1.html')
urlpatterns = patterns('',
url(r'^register/$', 'helloworld.views.formExample1'),
)
formExample1.html看起来像这样:
<script>
...
// Play button
$( "#id_playButton" ).click(function() {
var postdata = {
'starthour': $("#id_interval").slider("values", 0),
'endhour': $("#id_interval").slider("values", 1)
}
$.post('register/', postdata)
});
</script>
答案 0 :(得分:1)
我的示例中几乎没有明显的问题,您应该阅读forms。
以下是使用代码的简单示例...
def formExample1(request):
print 'RECEIVED REQUEST: ' + request.method
if request.method == 'POST':
form = YOURFORM(request.POST)
if form.is_valid():
startHour = form.cleaned_data['starthour']
endHour = form.cleaned_data['endhour']
如果你想使用POST值(坏主意),那么......
def formExample1(request):
print 'RECEIVED REQUEST: ' + request.method
if request.method == 'POST':
startHour = request.POST['starthour']
etc
然而,即使这样做仍然可以做得更好,为什么你甚至在这里分配了startHour等?
最后一个问题(如果仍未发送帖子数据)是一个jquery问题。看看这篇文章:Get POST data in django form AJAX from
从它的外观来看,你也没有发布真实的表格,因此缺少csrf_token,你需要将它添加到你的脚本中,即....
csrfmiddlewaretoken: '{{ csrf_token }}'
或者如果您愿意(但有理由反对这一点),只需在视图上方添加@csrf_exempt
即可免除。
答案 1 :(得分:0)
这是我使用jquery发布帖子的方式 在你的例子中困扰我的事情是你在“注册/”发布的事实...我不使用Django(webapp2代替)..但不应该是“/ register”?
var data = {"key":link.id};
$.ajax({
type: "POST",
url: "/deleteorders" , //+ link.id
data: data,
success: function(data){
//here you do the processing needed to remove the row from the html;
$('#'+link.id).parent().remove();
}
});