我有一个 modelForm 如下:
class UserProfileForm(forms.ModelForm):
class Meta:
model = FileUploads
fields = ['uploads']
和这样的 View :
@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)
我有一个简单的脚本来将多部分/编码文件发送到 View ,如下所示:
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)
我的问题是:只要我在接收 View 上方有 csrrf_exempt 装饰器,一切都可以正常工作,这对于测试环境来说很好。但如果我想要 csrf 保护到位怎么办?考虑到我正在使用 requests 模块,我如何提供 csrf token ?
最佳答案
您需要传递一个具有相同值的 cookie 和 header :
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)
token 的值并不重要,您可以采用任何文字,只要它们相同即可。
关于python - 如果使用 requests 模块将数据发布到 django View ,如何提供 csrf 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34158033/