无法解决这个问题。 CSRF验证在我的所有Django模板视图中都能正常工作。在这里,我试图使用我在其他帖子中找到的技术从python客户端发帖。 client.get(url)调用确实提供了令牌(调试器显示,例如:client.cookies [' csrftoken'] =' POqMV69MUPzey0nyLmifBglFDfBGDuo9')但requests.post()失败错误403,CSRF验证失败。发生了什么事?
我的Django视图(方法中包含一些虚拟内容):
class CameraUpload(View):
template_name = "account/templates/upload.html"
def get(self, request):
dummy = VideoForm()
return render(request, self.template_name, {'form': dummy})
def post(self, request):
dummy = VideoForm()
return render(request, self.template_name, {'form': dummy})
正在尝试发帖的客户:
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)
编辑:
尝试按照this link添加引用,因此代码现在看起来像:
r = requests.post(url, data=payload, headers=dict(Referer=url))
但存在同样的问题。
答案 0 :(得分:5)
您应该使用会话(client
)作为帖子:
r = client.post(url, data=payload, headers=dict(Referer=url))