Django接收post请求报403(CSRF cookie not set)解决办法

按照restful接口风格,新建资源的接口请求方式应为post,结果发了post请求给django之后,报了个403forbidden。

打印了里面的text内容,发现里面提到了“CSRF cookie not set”,这个的解决办法就是在setting.py文件中注释:

'django.middleware.csrf.CsrfViewMiddleware',

这个中间件是为了防止跨站请求伪造的,平时用网页表单请求时,post提交是没有问题的,但是用api调用时就会被禁止,为了能使用接口调用post请求,就只能停用该插件了。

或者如提示所说,需要仿造浏览器环境,如爬虫那样,那就太过麻烦了。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
这个错误是由于DjangoCSRF保护机制引起的,它需要确保每个POST请求都具有与会话关联的CSRF令牌。 在Django中,每个POST请求都需要在请求中包含一个名为`csrfmiddlewaretoken`的CSRF令牌。如果请求中不包含这个令牌,Django会抛出`Forbidden (CSRF cookie not set.)`错误。 为了解决这个问题,您需要在POST请求的表单中包含CSRF令牌。例如,在您的HTML表单中,可以添加以下代码: ```html {% csrf_token %} ``` 这将在表单中添加一个隐藏字段,其中包含与当前会话关联的CSRF令牌。当用户提交表单时,这个令牌将与请求一起发送,以通过CSRF保护。 如果您使用的是AJAX请求,可以将CSRF令牌作为请求头发送。例如,在JavaScript中,可以添加以下代码: ```javascript 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 = cookies[i].trim(); if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrfToken = getCookie('csrftoken'); $.ajax({ ... headers: { 'X-CSRFToken': csrfToken }, ... }); ``` 这将在请求头中添加一个名为`X-CSRFToken`的头,其中包含与当前会话关联的CSRF令牌。这样,您的AJAX请求将通过CSRF保护。 请注意,如果您使用的是第三方库或框架,例如Django REST framework或jQuery,它们可能会自动处理CSRF令牌。在这种情况下,您不需要手动添加CSRF令牌。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值