跳到主要内容

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)
]

只需要这样几步,一个简单的文件上传就完成了。接下来启动服务进行测试,参考如下的操作: