使用python将文件上传到Django服务器

时间:2015-11-29 18:53:25

标签: python django

我有一个简单的视图,它接收用户的文件。我已经用我的浏览器对它进行了测试,它运行正常。

另一方面,我有一个python并对requestb.in进行了测试,我可以看到multipart / form-data和一个http响应代码200.所以,我的接收和存储文件的视图和脚本都在上传多部分数据工作正常。

我的问题是:当我使用我的脚本将文件上传到视图时,即使我收到http状态代码200,我看到在使用的情况下磁盘上没有存储任何文件我做的浏览器。你会想到什么问题?这是我的模型,视图和脚本:

models.py:

class FileUploads(models.Model):
    uploads = models.FileField()

forms.py:

from django import forms
from .models import FileUploads

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = FileUploads
        fields = ['uploads']

views.py:

@csrf_exempt
def upper(request):
    form = UserProfileForm(request.POST or None, request.FILES or None)
    context = {'title': 'welcome', 'form': form}
    if form.is_valid():
        form.save()
        context = {'form': form, 'title': 'thanks'}'
    return render(request, 'upform.html', context)

Python脚本up.py:

import requests
f = open('C:\\Users\\Amir\\Desktop\\snow.jpg', 'rb')
urls='http://127.0.0.1:8000/upper'
r=requests.post(urls, files= {'a':f})
print(r.status_code)

1 个答案:

答案 0 :(得分:1)

应该是:

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

...传递给requests.post的字典中的文件名需要与Django表单中的字段名匹配:)