从Python客户端上传文件到Django服务器
我正在尝试从一个Python客户端上传一些文件到一个Django网页应用。
我可以通过使用表单来完成这个操作,但我不知道如何通过一个独立的Python应用来实现。你能给我一些建议吗?
我在Django模型中这样定义文件:
class Media(models.Model):
post = models.ForeignKey(Post)
name = models.CharField(max_length=50, blank=False,null=False)
mediafile = models.FileField(upload_to=media_file_name, blank=False,null=False)
谢谢。
4 个回答
-1
file = request.FILES['file']
load_file = FileSystemStorage()
filename = load_file.save(file.name, file) // saving in local directory and getting filename
data = {'name': name, 'address': address, 'age':age }
fr_data = None
with open(filepath ,'rb') as fr:
fr_data += fr.read()
url = 'http://127.0.0.1:8000/api/'
response = requests.post(url=url, data=data, files= {
'filefiledname': fr_data
}
)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
1
使用requests库:
with open('file') as f:
requests.post('http://some.url/upload', data=f)
2
你想要做的是向Django应用发送一个POST
请求,并在请求中附带一个文件。
你可以使用Python的标准库中的httplib
模块,或者使用第三方的requests
模块。最后一个链接展示了如何发送一个多部分编码的文件,这可能正是你需要的。
希望这对你有帮助!
0
现在这个程序正在运行,使用的是Python的requests模块。
我会把代码放出来,供有兴趣的人参考...
Django服务器...
urls.py文件
...
url(r'^list/$', 'dataports.views.list', name='list'),
...
views.py文件
@csrf_exempt
def list(request):
# Handle file upload
if request.method == 'POST':
print "upload file----------------------------------------------"
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
print "otra vez.. es valido"
print request.FILES
newdoc = Jobpart(
partfile = request.FILES['docfile']
)
newdoc.save()
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('dataports.views.list'))
else:
#print "nooooupload file----------------------------------------------"
form = DocumentForm() # A empty, unbound form
# Render list page with the documents and the form
return render_to_response(
'data_templates/list.html',
{'form': form},
context_instance=RequestContext(request)
)
list.html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Minimal Django File Upload Example</title>
</head>
<body>
<!-- Upload form. Note enctype attribute! -->
<form action="{% url "list" %}" method="post" enctype="multipart/form-data">
<p>
{{ form.docfile }}
</p>
<p><input type="submit" value="Upload" /></p>
</form>
</body>
</html>
现在来看客户端的部分。
client.py文件
import requests
url = "http://localhost:8000/list/"
response = requests.post(url,files={'docfile': open('test.txt','rb')})
现在你可以添加一些安全措施和其他功能了……不过其实这是一个非常简单的例子。
谢谢大家!!!!