如何在我的django views函数中从Ajax POST获取数据?

时间:2013-11-30 14:50:03

标签: django

$(document).ready(function(){  
  $('.addFolder input').keydown(function(e) {
    if (e.keyCode == 13) {
        name = $(this).val();
        $.ajax({
          type: "POST",
          url: "/folder/",
          data: name,
            success: function(result) {
              $('.folders ul li:first-child').after('<li class="bg-color-2 ui-droppable" data-folderid="2">'+name+' <span>0</span></li>');
              $('.addFolder input').val('');
            }
        });
    }
  });

如何在我的django views函数中从这个Ajax帖子中获取数据?

模板:

  <div class="addFolder">
    <span>+</span>
    <input type="text" placeholder="Folder's name">

  </div>

的观点:

def folder(request):
    user = request.user
    if request.method == "POST" and request.is_ajax():
        name = request.POST['name']
        f = Folder.objects.create(name=name, user=user)
        status = "Good"
        return HttpResponse(status)
    else:
        status= "Bad" 
        return HttpResponse(status)

为什么我还有:

  

[2013年11月30日14:47:52]“POST / folder / HTTP / 1.1”403 2294

在日志中?

1 个答案:

答案 0 :(得分:8)

您始终可以在request.POST变量中访问它。
文件:link

你应该在js代码中修复的另一件事是data参数 jQuery文档声明如下:Object must be Key/Value pairslink

更新问题
您收到403因为您没有发送csrf令牌 如果您在MIDDLEWARE_CLASSES中启用了'django.middleware.csrf.CsrfViewMiddleware',那么您需要将{% csrf_token %}放入表单的模板中,然后通过js将其与您的数据一起发送。
像这样:data: {'name': name, 'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val()}