CSRF验证在request.post()上失败 - python

无法弄清楚这一点。 CSRF验证在我的所有Django模板视图中均能正常工作。在这里,我尝试使用我在其他帖子中发现的技术从python客户端发布帖子。 client.get(url)调用确实提供了令牌(调试器显示,例如:client.cookies ['csrftoken'] ='POqMV69MUPzey0nyLmifBglFDfBGDuo9'),但是request.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))

但是存在同样的问题。

python大神给出的解决方案

您应该在会话中使用会话(client):

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