【问题标题】:POST http://127.0.0.1:8000/notifications/ajax/ 403 (FORBIDDEN)//using ajax+djangoPOST http://127.0.0.1:8000/notifications/ajax/ 403 (FORBIDDEN)//使用ajax+django
【发布时间】:2016-06-07 19:01:42
【问题描述】:

为什么会出现这个错误,我认为我有正确的 ajax 函数,我设置了正确的网址...请,任何帮助将不胜感激。

<div id='notificationsLoader'>
</div>
<script>
$(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('<h3>notifications</h3>');
        $(data.notifications).each(function(){
          $("notificationsLoader").append(this + "<br/>")
        })
        console.log(data.notifications);
      },
      error: function(rs, e){
        console.log(rs);
        console.log(e);
      }


    })
  })
})
</script>

views.py

@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')

urls.py

urlpatterns += patterns('notifications.views',
    url(r'^notifications/$', 'all', name='notifications_all'),
    url(r'^notifications/ajax/$', 'get_notifications_ajax', name='get_notifications_ajax'),
    url(r'^notifications/(?P<id>\d+)/$', 'read', name='notifications_read'),

)

我尝试在 settings.py 中更改允许主机,但它不起作用。我几乎可以肯定代码是正确的,因为我正在学习教程,并且使用这个代码指导员可以毫无问题地做到这一点。谢谢,

完全错误

发布http://127.0.0.1:8000/notifications/ajax/ 403(禁止)> 错误)发送@jquery.min.js:4m.extend.ajax@jquery.min.js:4(匿名 函数)@(索引):359m.event.dispatch@jquery.min.js:3r.handle@ jquery.min.js:3

【问题讨论】:

标签: jquery python ajax django


【解决方案1】:

您的数据正在使用 csrf_token 上下文变量,我猜您还没有设置,更有可能您想为令牌使用 django 模板标签

  url:"{% url 'get_notifications_ajax' %}",
  data: {
    csrfmiddlewaretoken: "{% csrf_token %}",
  },

除此之外,500 错误是服务器错误,在调试和开发时,您应该将DEBUG 设置为 true 以获取更多信息错误。

【讨论】:

  • 谢谢,但现在我得到了 403(Forbidden),我认为它来自 csrf,我在我的 settings.py 中设置了我的 debug=true
  • @mikebraa - 您现在应该更新您的问题以包含您从错误中获得的信息
  • 好的,所以我应该使用 csrfmiddlewaretoken: "{% csrf_token %}" 而不是 csrfmiddlewaretoken: "{{csrf_token}}"??因为我正在做一个 django 教程(被困在这里)并且讲师正在使用 {{csrf_token}}
  • @mikebraa - 我不知道讲师为什么在那里使用它,他们可能出于任何原因将其包含在视图中。 They use the correct syntax everywhere else
  • 我明白了......我想我应该更新这个问题。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 2021-02-11
  • 2017-12-30
  • 2021-06-11
  • 1970-01-01
相关资源
最近更新 更多