1

I have a Django server running localy at http://localhost:8000, with a view set over url /register/.

There I have an html file with a form. The view is correctly displayed. But when I push a button, a POST request should be generated, but Django doesn't receive any request.

I don't know if I am setting a wrong host to make the post or I'm having a different trouble, because when testing at jsFiddle from Firefox for windows, I can see the POST with Firebug; but if I use Firefox&Firebug for Ubuntu, at the virtual machine where I'm running Django, no POST request is catched by Firebug.

#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'),
)

And formExample1.html looks like this:

<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>
4

2 回答 2

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在您的视图上方添加使其豁免。

于 2013-05-24T12:37:12.377 回答
0

这就是我使用 jquery 发布帖子的方式 在您的示例中困扰我的是您在“注册/”处发布的事实......我不使用 Django(而不是 webapp2)......但它不应该是“/登记” ?

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();
  }
}); 
于 2013-05-24T12:41:51.790 回答