【问题标题】:django jquery $.get to $.postdjango jquery $.get 到 $.post
【发布时间】:2012-02-23 11:57:35
【问题描述】:

在 django 我有

#template
$.get("/places/{{ place.id }}/save/",{description : cadena }

#view
place.description = request.POST.getlist('description')[0]

工作正常。 但是如果尝试更改为$.post

#template
$.post("/places/{{ place.id }}/save/",{description : cadena }

#view
print request.POST

什么都没发生

解决了

我的问题,我没有在发送$.post 的视图中添加context_instance=RequestContext(request),因为这个crsf_token 不存在。

现在可以使用此更改

 $.post("/places/{{ place.id }}/save/",{description : cadena, csrfmiddlewaretoken: '{{ csrf_token }}'}

并且是{{ csrf_token }} 不是{% csrf_token %} 的必要条件。
{% csrf_token %} 创建一个<input ...>

【问题讨论】:

    标签: jquery django post get


    【解决方案1】:

    您可能遇到了跨站点请求伪造 (CSRF) 问题 - Django 拒绝 POST,因为没有 CSRF 令牌。对于 Ajax,您需要做一些特殊处理,或者将视图标记为csrf_exempt。可以在此处找到有关此的更多信息: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

    【讨论】:

    • 在您的模板中可以尝试: $.post("/places/{{ place.id }}/save/",{description : cadena, csrfmiddlewaretoken: '{{ csrf_token }}'},这适用于 Django 1.3,我认为使用 csrftoken 而不是 csrfmiddlewaretoken 之前的版本
    • @Jingo 我改成了{description : cadena, csrfmiddlewaretoken: '{{ csrf_token }}'},但什么也没发生
    • 我认为是{% csrf_token %}(注意:{% 不是{{
    • @Dan-breen ,我得到<QueryDict: {u'csrfmiddlewaretoken': [u''], u'description': [u'test text']}>
    • 您使用的是哪个 Django 版本?并且您是否已经尝试过 Dan 的建议,尝试让您的视图免受 csrf 保护,看看它是否有效。
    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多