【问题标题】:403 FORBIDDEN in django agon-rating403 FORBIDDEN in django agon-rating
【发布时间】:2013-10-04 11:04:32
【问题描述】:

提交评分时,agon-ratings 插件中有 403 FORBIDDEN 错误。 我已经阅读了doc。但是标头中存在 csrf 令牌:

Request Headersview source  
Accept  */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cache-Control   no-cache
Connection  keep-alive
Content-Length  22
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Cookie  csrftoken=6C7zHmrBufWbiYeTXwRkCWC9hDfdxGoW;    sessionid=4d6b6977721fcb97f6903d0aaab5e632
Host    localhost:8000
Pragma  no-cache
Referer http://localhost:8000/news/40/asdas/
User-Agent  Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20100101   Firefox/23.0
X-Requested-With    XMLHttpRequest

任何有关此问题的帮助将不胜感激。 提前致谢

【问题讨论】:

    标签: python ajax django


    【解决方案1】:

    我猜你正在通过 ajax 请求发帖,如果正确的话,你需要将 csrf 令牌作为 POST 数据的一部分或通过 X-CSRFToken 标头发送。

    我在您发布的请求标头中没有看到任何内容。

    您链接的 Django 文档有一个关于如何执行此操作的工作示例(如果您使用 jQuery,它主要是复制和粘贴工作)

    【讨论】:

    • 您的请求仍然没有显示 csrf 标头或数据;也许您可以发布您拥有的相关js代码
    • 现在:X-CSRFToken 6C7zHmrBufWbiYeTXwRkCWC9hDfdxGoW,但仍然“禁止”
    • 查看 process_view 中的 django.middleware.csrf 并在那里进行一些调试(print / pdb.set_trace() ...)以找出请求被标记为禁止的位置
    【解决方案2】:

    您正在使用 POST 方法。使用 POST 方法,您需要在表单元素内的 HTML 中编写 {% csrf_token %} 或在 ajax 请求中传递 csrftoken,即https://docs.djangoproject.com/en/dev/ref/contrib/csrf/。

    当您在 django 设置中编写 CSRFMiddleware 和 csrf 上下文处理器时,这是强制性的。

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 2021-03-02
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 2020-06-27
      • 2014-06-10
      相关资源
      最近更新 更多