如果使用请求模块将 post 数据发送到 django 视图,我如何提供 csrf 保护
how can I provide csrf protection in case of using requests module to post data to a django view
我有一个模型如下:
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)
我有一个简单的脚本可以将 multipart/encoded 文件发送到视图:
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_exempt 装饰器,一切正常,这对测试环境来说很好。但是,如果我想要适当的 csrf 保护怎么办?考虑到我正在使用请求模块,我该如何提供 csrf 令牌?
您需要传递一个 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的值无所谓,可以取任意字面值,只要相同即可。
我有一个模型如下:
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)
我有一个简单的脚本可以将 multipart/encoded 文件发送到视图:
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_exempt 装饰器,一切正常,这对测试环境来说很好。但是,如果我想要适当的 csrf 保护怎么办?考虑到我正在使用请求模块,我该如何提供 csrf 令牌?
您需要传递一个 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的值无所谓,可以取任意字面值,只要相同即可。