【问题标题】:POST request is not catched by Django serverPOST 请求未被 Django 服务器捕获
【发布时间】:2013-05-20 00:32:55
【问题描述】:

我有一个 Django 服务器在本地运行 http://localhost:8000,视图设置在 url /register/

我有一个带有表单的 html 文件。视图正确显示。但是当我按下按钮时,应该会生成一个 POST 请求,但 Django 没有收到任何请求。

我不知道我是否设置了错误的主机来发布帖子,或者我遇到了不同的问题,因为在 jsFiddle 从 Firefox for windows 进行测试时,我可以看到带有 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>

【问题讨论】:

  • 您根本不处理响应。您应该在 .done 的一部分 .post 中进行操作
  • 可能是一个愚蠢的问题,但是当您在开发服务器上运行页面时,$("#id_playButton") 是否返回了正确的按钮?
  • 你用萤火虫吗?网络标签说什么?
  • @matino 怎么样?请在回答中说明。 Teshte,当我按下按钮时,它在 net 选项卡中什么也没说(在 ubuntu 虚拟机中,在 jsFiddle,Firebug 在 Console 选项卡和 Net 选项卡上显示了带有正确变量的 POST)
  • 所以它正确地发布到 /register 并运行你的视图,但是你说大多数没有被发送?

标签: javascript jquery django post


【解决方案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 使其免除。

【讨论】:

  • 我(目前)没有使用 Django 表单,也没有使用 JQuery 表单。我单独使用了一些 JQuery 小部件,而不是一起使用。没有进行验证(当前)。这就是为什么我从 POST 请求而不是使用 Django 表单获取数据的原因。您的代码就像我的第一种方法一样,就在我转向 JQuery UI 以获得更好的小部件之前。
【解决方案2】:

这就是我使用 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();
  }
}); 

【讨论】:

  • 它不起作用(我没有使用成功参数及其功能,我想它不适用于我正在做的事情)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 2015-09-12
  • 1970-01-01
  • 2019-01-08
相关资源
最近更新 更多