文件上传
文件上传是网站开发中的常见功能,Django中是怎么实现文件上传功能的呢?
1.前端HTML代码实现
1.在前端我们需要填入一个form标签,然后在这个form标签中指定enctype='mutipart/form-data'。不指定的话就不能上传文件。
2.在form标签中添加一个input标签,然后指定input标签的name,以及type='file'。
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file01">
<input type="submit" value="提交">
</form>
2.后端代码实现:
后端的主要工作就是接收文件,然后存储文件,接收文件的方式与POST接收的方式是一样的,不过用的是FILES来实现的,views.py文件中示例代码如下:
from django.shortcuts import render
from django.http import HttpResponse
from django.views import View
def save_file(file):
with open('zjy.txt', 'wb') as fp:
for chunk in file.chunks():
fp.write(chunk)
class IndexView(View):
def get(self,request):
return render(request, 'index.html')
def post(self, request):
file01 = request.FILES.get('file01')
# with open('zjy.txt', 'wb') as fp:
# for chunk in file01.chunks():
# fp.write(chunk)
save_file(file01)
return HttpResponse('Success')
在当前app中创建一个urls.py文件,并且进行子url的映射。尤其需要注意的是,这里的IndexView是一个类,不是一个视图,所以在进行映射的时候要将类映射为视图,如果不映射为类视图的话,会报错显示:__init__需要一个参数但是被给了两个参数。示例代码如下:
from django.urls import path
from . import views
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
在主url中与子url之间进行映射,示例代码如下:
from django.urls import path, include
urlpatterns = [
path('uploadfile/', include('uploadfile.urls')),
]
之后就可以在浏览器中输入url:127.0.0.1:8000/uploadfile/,就可以中本机中选择文件进行上传了。