{{csrf_token}}给了我403 Forbidden和{%csrf_token%}给了我500服务器错误

我读到这两个基本相同的东西,但是每个都给了我不同的错误我不确定要追哪一个。 我甚至不知道如何解决这个问题。 有人可以看看我的代码,我现在已经两天苦苦挣扎了。

我的HTML

$(document).ready(function(){ $(".notification-toggle").click(function(e){ e.preventDefault(); $.ajax({ type:"POST", url:"{% url 'get_notifications_ajax' %}", data: { csrfmiddlewaretoken:"{%csrf_token%}", }, success: function(data){ $("#notificationsLoader").html('

notifications

'); $(data.notifications).each(function(){ $("notificationsLoader").append(this + "
") }) console.log(data.notifications); }, error: function(rs, e){ console.log(rs); console.log(e); } }) }) })

另一个HTML

  
  • notification
  • 并且通知来自我的python代码

     @login_required def get_notifications_ajax(request): notification = Notification.objects.get(id=id) notes =[] for note in notifications: notes.append(str(note)) data={ "notifications":notes } json_data = json.dumps(data) return HttpResponse(json_data, content_type='application/json') 

    还有更多这个,但我会发布这一部分,因为我认为错误(403和500)都说我的服务器端错了

    来自Django项目文件 :

    虽然上述方法可用于AJAX POST请求,但它有一些不便之处:您必须记住在每次POST请求时将CSRF令牌作为POST数据传递。 因此,有一种替代方法:在每个XMLHttpRequest上,将自定义X-CSRFToken标头设置为CSRF标记的值。 这通常更容易,因为许多javascript框架提供了允许在每个请求上设置标头的钩子。

    因此,您可以将csrftoken值作为X-CSRFToken标头传递,它可以从cookie中获取(我已根据需要添加了getCookie函数)。 您可以通过在发送之前使用ajaxSetup设置ajax请求来轻松完成此操作,请参阅下面的代码:

     // Source https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/#ajax function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } $(".notification-toggle").click(function(e){ e.preventDefault(); var token = getCookie('csrftoken'); $.ajaxSetup({'headers': {'X-CSRFToken': token}}); // $.ajax... 

    另外,您可以尝试从以下位置替换您的数据:

     data: { csrfmiddlewaretoken:"{%csrf_token%}", }, 

     data: { csrfmiddlewaretoken:$("input[name=csrfmiddlewaretoken]").val() },