Django CSRF令牌存在,但仍收到403禁止错误
我正在尝试设置一个DjangoAPI,它接收带有一些JSON数据的POST请求,并基本上向收件人列表发送电子邮件。逻辑相当简单:Django CSRF令牌存在,但仍收到403禁止错误,django,api,python-requests,csrf,django-middleware,Django,Api,Python Requests,Csrf,Django Middleware,我正在尝试设置一个DjangoAPI,它接收带有一些JSON数据的POST请求,并基本上向收件人列表发送电子邮件。逻辑相当简单: 首先,当我创建一篇博客文章时,我有了它的视图。在模板中,我包括Django文档中指定的csrf_令牌。当我点击submit按钮时,除了创建帖子之外,CreatePost视图还在场景后面向负责发送电子邮件的API发出请求(我正在使用requests模块)。这是向API发送请求的逻辑部分: data = { "title": ne
- 首先,当我创建一篇博客文章时,我有了它的视图。在模板中,我包括Django文档中指定的csrf_令牌。当我点击submit按钮时,除了创建帖子之外,CreatePost视图还在场景后面向负责发送电子邮件的API发出请求(我正在使用requests模块)。这是向API发送请求的逻辑部分:
data = { "title": new_post.title, "summary": new_post.summary, "link": var["BASE_URL"] + f"blog/post/{new_post.slug}" } csrf_token = get_token(request) # print(csrf_token) headers = {"X-CSRFToken": csrf_token} requests.post(var["BASE_URL"] + "_api/send-notification/", json=data, headers=headers)
>>> Forbidden (CSRF cookie not set.): /_api/send-notification/
>>> "POST /_api/send-notification/ HTTP/1.1" 403 2864
我在SO上读过几个类似的问题,但它们主要涉及使用csrf_豁免装饰器,在我看来这并不是一个真正的解决方案。它只是完全消除了CRSF标记的有用性
有人知道是什么导致了这个问题吗?
谢谢。错误试图告诉您需要将令牌添加到cookie存储中,如下所示:
cookies = {'csrftoken': csrf_token}
requests.post(var["BASE_URL"] + "_api/send-notification/", json=data, headers=headers, cookies=cookies)
工作很有魅力,谢谢!你知道为什么Django希望令牌出现在cookie中,而不是出现在专用的头文件中吗?阅读这个问题-