Javascript Django的CSRF验证失败,尽管Firebug说cookies选项卡下面有一个csrftoken。为什么?

Javascript Django的CSRF验证失败,尽管Firebug说cookies选项卡下面有一个csrftoken。为什么?,javascript,python,django,csrf,django-csrf,Javascript,Python,Django,Csrf,Django Csrf,我遵循了StackOverflow上推荐的很多东西,但都没用。我还尝试在不同的地方在html中加入{%csrf_token%},但似乎都不起作用。有什么建议吗?这是我的Django模板输入按钮: <input id=saveWaypoints type=button value=Save disabled=disabled> 然后在views.py中调用此视图: def save(request): 'Save waypoints' for waypointStri

我遵循了StackOverflow上推荐的很多东西,但都没用。我还尝试在不同的地方在html中加入{%csrf_token%},但似乎都不起作用。有什么建议吗?这是我的Django模板输入按钮:

<input id=saveWaypoints type=button value=Save disabled=disabled>
然后在views.py中调用此视图:

def save(request):
    'Save waypoints'
    for waypointString in request.POST.get('waypointsPayload', '').splitlines():
        waypointID, waypointX, waypointY = waypointString.split()
        waypoint = Waypoint.objects.get(id=int(waypointID))
        waypoint.geometry.set_x(float(waypointX))
        waypoint.geometry.set_y(float(waypointY))
        waypoint.save()
    return HttpResponse(simplejson.dumps(dict(isOk=1)), content_type='application/json')

根据django文档,您可以将令牌作为请求的标头,也可以将其添加为有效负载

您就快到了,但您只需将其作为自己的参数发送,而不是waypointsPayload的一部分:


cookie是读取令牌的另一个位置,而不是输入,以防您不想在模板中添加令牌标记。

根据django docs,您可以将令牌作为请求的标头或作为负载添加

您就快到了,但您只需将其作为自己的参数发送,而不是waypointsPayload的一部分:


cookie是读取令牌的另一个位置,而不是输入,以防您不想在模板中添加令牌标记。

谢谢!重量已经减轻了,谢谢!重量已经减轻了。
def save(request):
    'Save waypoints'
    for waypointString in request.POST.get('waypointsPayload', '').splitlines():
        waypointID, waypointX, waypointY = waypointString.split()
        waypoint = Waypoint.objects.get(id=int(waypointID))
        waypoint.geometry.set_x(float(waypointX))
        waypoint.geometry.set_y(float(waypointY))
        waypoint.save()
    return HttpResponse(simplejson.dumps(dict(isOk=1)), content_type='application/json')
$.post("{% url 'waypoints-save' %}", {
  csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
  waypointsPayload: waypointStrings.join('\n')
}, function (data) {
  ...
});