Python 请求时CSRF验证失败。post()

Python 请求时CSRF验证失败。post(),python,django,Python,Django,我想不出这个。CSRF验证在我的所有Django模板视图中都可以正常工作。在这里,我试图使用我在其他文章中发现的技术从python客户机发布文章。client.get(url)调用确实提供了令牌(调试器显示,例如:client.cookies['csrftoken']='POqMV69MUPzey0nyLmifBglFDfBGDuo9'),但请求.post()失败,错误为403,CSRF验证失败。发生什么事了 我的Django视图(方法中有一些虚拟内容): 而试图发布帖子的客户: import

我想不出这个。CSRF验证在我的所有Django模板视图中都可以正常工作。在这里,我试图使用我在其他文章中发现的技术从python客户机发布文章。client.get(url)调用确实提供了令牌(调试器显示,例如:client.cookies['csrftoken']='POqMV69MUPzey0nyLmifBglFDfBGDuo9'),但请求.post()失败,错误为403,CSRF验证失败。发生什么事了

我的Django视图(方法中有一些虚拟内容):

而试图发布帖子的客户:

import requests

url = 'http://127.0.0.1:8000/account/camera_upload/'

client = requests.session()
client.get(url)
csrftoken = client.cookies['csrftoken']

payload = {
    'csrfmiddlewaretoken': csrftoken,
    'tag': '69'
}

r = requests.post(url, data=payload)
r = client.post(url, data=payload, headers=dict(Referer=url))
编辑:

已尝试根据so添加引用程序,代码如下所示:

r = requests.post(url, data=payload, headers=dict(Referer=url))

但同样的问题也存在

您应该使用您的会话(
客户端
)来发布:

import requests

url = 'http://127.0.0.1:8000/account/camera_upload/'

client = requests.session()
client.get(url)
csrftoken = client.cookies['csrftoken']

payload = {
    'csrfmiddlewaretoken': csrftoken,
    'tag': '69'
}

r = requests.post(url, data=payload)
r = client.post(url, data=payload, headers=dict(Referer=url))

您的url中有一个额外的前言斜杠,即
/
,您可能应该删除该斜杠。删除它会导致以下错误:“您通过POST调用此URL,但URL不以斜杠结尾,并且您已设置了APPEND_斜杠。Django在维护POST数据时无法重定向到斜杠URL…”那么下一个问题是,您为什么要设置
APPEND_斜杠
?额外的斜杠通常会把事情搞砸,尤其是在前端(javascript等)。。但我想既然你把它作为一种设置,它就可以了?但这可能不是最好的做法。我猜问题出在每次你提出请求时,它都会设置一个cookie/证书,所以从上一个请求发送一个cookie/证书会搞乱下一个请求。。但我不知道提供了什么…我想我在发布我的编辑之前错过了你的评论,但那是完全正确的。谢谢,谢谢!这正是我的问题