我尝试使用csrf token向Django应用程序发送JSON请求,但我不知道如何操作。我已经将token放入了一个可以引用的变量中,但我不知道如何使用fetch通过JSON请求发送它。我已经将'csrfmiddlewaretoken': csrftoken
添加到JSON.stringify部分,但我仍然收到错误消息403 Forbidden。有人可以帮助我吗?谢谢你,谢谢(抱歉代码上的奇怪缩进)
JavaScript文件:
fetch('/update', {
method: 'PUT',
body: JSON.stringify({
'csrfmiddlewaretoken': csrftoken,
'liked': true,
'post_id': parseInt(button.dataset.post_id)
})
})
字符串
views.py:
data = json.loads(request.body)
try:
content = data.get('content')
except:
JsonResponse({'error': 'content required'}, status=400)
try:
id = data.get('id')
post = Post.objects.get(id=id)
except:
JsonResponse({'error': 'post not found'}, status=400)
if request.user == post.user:
post.content = content
post.save()
return JsonResponse({'message': f'received: {content}'})
return JsonResponse({'error': "can't edit this user's posts"}, status=403)
型
2条答案
按热度按时间hsgswve41#
首先要获取csrf你可以使用下面的代码
字符串
}
现在我们得到了CSRF令牌,将这行代码添加到fetch的头部中
型
Refrence
insrf1ej2#
首先,来自Andrea和Gabcvit的一些代码将非常受欢迎。
编辑Farhan的回答:您需要手动检索csrf token,因为JavaScript中没有默认的方法。您可以通过以下方式执行此操作:
字符串
如果React没有收到Django的csrf token(在我的例子中发生了),你需要在视图上方添加以下代码:
型
如果您需要更多帮助,this MDN article将帮助您。