29
Django 的文件上传
在学习完 Django 的 Form 模块后,我们就用最后一个常用的文件上传的场景来结束本部分的内容。
1. Django 的文件上传实验
同样,话不多说,我们先通过两个上传的例子来看看 Django 的上传功能。
实验1:简单文件上传
准备本地文件,upload.txt,上传到服务器的 /root/test/django
目录下;
准备模板文件,显示上传按钮:
<form method="post" action="/hello/file\_upload/" enctype="multipart/form-data">
{% csrf\_token %}
{{ forms }}<br>
<input type="submit" value="提交">
</form>
完成 Form 表单以及视图函数的编写:
class FileUploadForm(forms.Form):
file = forms.FileField(label="文件上传")
def handle\_uploaded\_file(f):
save_path = os.path.join('/root/test/django', f.name)
with open(save_path, 'wb+') as fp:
for chunk in f.chunks():
fp.write(chunk)
@csrf_exempt
def file\_upload(request, \*args, \*\*kwargs):
error_msg = ""
if request.method == 'POST':
forms = FileUploadForm(request.POST,request.FILES)
if forms.is_valid():
handle_uploaded_file(request.FILES['file'])
return HttpResponse('上传成功')
error_msg = "异常"
else:
forms = FileUploadForm()
return render(request,'test\_file\_upload.html',{'forms':forms, "error\_msg": error_msg})
编写 URLConf 配置:
urlpatterns = [
# ...
# 文件上传测试
path('file\_upload/', views.file_upload)
]
只需要这样几步,一个简单的文件上传就完成了。接下来启动服务进行测试,参考如下的操作: