python - 如果使用 requests 模块将数据发布到 django View ,如何提供 csrf 保护

标签 python django csrf

我有一个 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/

相关文章:

python - 自动传输文件到文件夹(OpenCV)

python - 筛选具有日期时间范围的对象 (00 :00 to 23:59:99) in Django

javascript - 每页 csrf token - java.lang.IllegalStateException : must define 'uri' attribute when token per page is enabled

java - X-CSRF-TOKEN 不是由 Spring Boot 生成的

python - 如何优雅地停止 Pulumi up 命令

python - 如何使用 Django 中检索表单的数据(对于计算器应用程序)

Python - Property Getter 作为带有参数的 lambda

python - 尝试加载时引发导入错误 'blog.templatetags.blog_tags' : No module named 'markdown

django tables2 创建带有链接的额外列

java - 如何在 PHP 前端中使用 play 框架 (play-2.2.3) 提供的 CSRF token ?