Django服务器没有捕获POST请求

时间:2013-05-24 11:57:27

标签: javascript jquery django post

我有一个在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')

urls.py

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>

2 个答案:

答案 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();
  }
});