• 125.文件上传基本流程


    文件上传

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

    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    linux驱动程序之电源管理之标准linux休眠与唤醒机制分析(一)
    linux驱动程序之电源管理 之linux休眠与唤醒(2)
    linux驱动程序之电源管理之regulator机制流程 (1)
    ARM--存储管理器
    元朝皇帝列表 元朝历代皇帝简介
    linux下valgrind的使用概述
    linux之sort用法
    python的ftplib模块
    Python使用struct处理二进制(pack和unpack用法)
    Python使用struct处理二进制(pack和unpack用法)
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12354598.html
Copyright © 2020-2023  润新知