Python 在使用请求模块将数据发布到django视图的情况下,如何提供csrf保护

Python 在使用请求模块将数据发布到django视图的情况下,如何提供csrf保护,python,django,csrf,Python,Django,Csrf,我有一个模型,如下所示: class UserProfileForm(forms.ModelForm): class Meta: model = FileUploads fields = ['uploads'] 这样的观点: @csrf_exempt def upper(request): form = UserProfileForm(request.POST or None, request.FILES or None) if form

我有一个模型,如下所示:

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = FileUploads
        fields = ['uploads']
这样的观点:

@csrf_exempt
def upper(request):
    form = UserProfileForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        form.save()
        return HttpResponse(status=200)
    return HttpResponse(status = 403)
我有一个简单的脚本将多部分/编码文件发送到视图,如下所示:

import requests
f = open('C:\\Users\\myname\\Desktop\\image.jpg', 'rb')
urls='http://localhost:8000/upper'
r=requests.post(urls, files= {'uploads':f})
print(r.status_code)

我的问题是:只要在接收视图上方有csrrf_豁免装饰器,一切都可以正常工作,这对于测试环境来说很好。但是如果我想让csrf保护就位呢?考虑到我使用的是requests模块,如何提供csrf令牌?

您需要传递具有相同值的cookie和标头:

import requests
f = open('C:\\Users\\myname\\Desktop\\image.jpg', 'rb')
urls='http://localhost:8000/upper'
cookies = {'csrftoken': 'token'}
headers = {'X-CSRF-TOKEN': 'token'}
r=requests.post(urls, files={'uploads':f}, cookies=cookies, headers=headers)
print(r.status_code)

令牌的值无关紧要,您可以采用任何文字,只要它们相同

是的,这是安全的。如果其他网站(ab)可以使用您的会话(例如,evil.com上提交给您网站的表单),则您需要加密安全令牌,但此处并非如此。在这里,您可以完全控制整个会话,因此任何令牌都是安全的。