125.文件上传基本流程

匆匆过客 提交于 2020-02-27 04:21:25

文件上传

文件上传是网站开发中的常见功能,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/,就可以中本机中选择文件进行上传了。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!