Django高级扩展之文件上传

这篇具有很好参考价值的文章主要介绍了Django高级扩展之文件上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件上传是一个比较常用的网站功能,在服务器端,Django会使用一个叫作request.FILES的对象来处理上传的文件。

目录

存储路径

创建存储目录

配置settings.py

上传单文件

配置url

上传文件模板

视图方法

显示上传页面

上传文件处理

上传效果

1.选好上传文件

2.点击提交

3.查看上传文件

上传多文件

新建表单类

多文件上传视图

多文件上传路由

引入表单类

设置路由

上传效果

1.上传页面

2.选择多文件

3.查看选中文件

4.上传成功

总结


存储路径

创建存储目录

在static/应用目录下创建uploads目录用于存储接收上传的文件。

Django高级扩展之文件上传

 

配置settings.py

上传文件目录

MEDIA_ROOT = os.path.join(BASE_DIR, 'static/myapp/uploads')

上传单文件

文件上传时,文件数据存储在request.FILES属性中。

注意:from表单上传文件需要加 enctype=”multipare/form-data”

上传必须是post请求。

配置url

path('upload_view', views.upload_view, name='upload_view'),
path('upload_save', views.upload_save, name='upload_save'),

上传文件模板

在应用模板目录下创建上传单一文件的模板。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传单文件</title>
</head>
<body>
<form action="{% url 'myapp:upload_save' %}" method="post" 
enctype="multipart/form-data">
    请选择文件:<input type="file" name="file">
    <br>
    {% csrf_token %}
    <input type="submit" value="提交">
</form>
</body>
</html>

视图方法

显示上传页面

def upload_view(request):

    return render(request, 'myapp/uploadOne.html')

上传文件处理

from django.conf import settings
def upload_save(request):
    """ 上传文件保存 """

    if request.method == 'POST':
        file = request.FILES['file']
        # 文件在服务端路径 获取配置

        filePath = os.path.join(settings.MEDIA_ROOT, file.name)
        # 保存文件
        with open(filePath, 'wb+') as fp:
            for info in file.chunks():
                fp.write(info)
        return HttpResponse('上传成功!')
    else:
        return HttpResponse('请选择POST提交文件!')

注意:为了避免read()方法一次性将文件读取到内存中造成内存不足的问题,使用f.chunks()方式将文件分块处理。

上传效果

1.选好上传文件

Django高级扩展之文件上传

 

2.点击提交

Django高级扩展之文件上传 

 

3.查看上传文件

上传成功后,上传文件保存目录可见上传文件。

 Django高级扩展之文件上传

 

上传多文件

由于标准的HTML只允许使用<input type="file">进行文件上传,而<input type="file">每次只能上传一个文件,因此对于需要进行大量文件上传的操作来说会很不方便,这在Django中就变得相对简单很多。

新建表单类

在应用目录下新建文件forms.py,添加FileFieldForm表单类。

内容如下:

from django import forms

class FileFieldForm(forms.Form):
    file_field = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))

多文件上传视图

在应用目录下新建form_view类,用作多文件上传视图处理。

内容如下:

import os
from django.conf import settings
from django.views.generic.edit import FormView
from .forms import FileFieldForm
from django.http import HttpResponse

class FileFieldView(FormView):
    form_class = FileFieldForm
    # 设置模板路径
    template_name = 'myapp/uploadMany.html'
    # 设置后跳转路径
    success_url = 'upload_success'

    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        files = request.FILES.getlist('file_field')
        if form.is_valid():
            for f in files:
                handle_uploaded_file(f)
            return self.form_valid(form)
        else:
            return self.form_valid(form)


def handle_uploaded_file(file):
    """ 文件保存处理 """
    filePath = os.path.join(settings.MEDIA_ROOT, file.name)
    # 保存文件
    with open(filePath, 'wb+') as fp:
        for info in file.chunks():
            fp.write(info)


def upload_success(request):
    """ 上传成功响应 """

    return HttpResponse('多文件上传成功!')

多文件上传路由

引入表单类

from . import form_view

设置路由

path('upload_many', form_view.FileFieldView.as_view(), name='upload_many'),
path('upload_success', form_view.upload_success, name='upload_success'),

上传效果

1.上传页面

Django高级扩展之文件上传

 

2.选择多文件

按住ctrl点选多个文件,确定后点击打开。

Django高级扩展之文件上传

 

3.查看选中文件

Django高级扩展之文件上传 

移动鼠标到7个文件处,可显示选中文件列表

Django高级扩展之文件上传 

 

4.上传成功

上传文件目录可见文件

Django高级扩展之文件上传 

 

总结

单文件上传很好实现,多文件就需要依赖很多类库来实现。文章来源地址https://www.toymoban.com/news/detail-489245.html

到了这里,关于Django高级扩展之文件上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django静态文件&媒体文件&文件上传

    创建一个新项目 Day06DjangoPro01 每一个应用中都可以新建一个static和templates 如果想要额外再加一些静态文件路径,就再加一个STATICFILES_DIRS Apptemplatesindex.html 一般用 link rel=\\\"stylesheet\\\" href=\\\"{% static \\\'css/index.css\\\' %}\\\" Appstaticcssindex.css 根路由 Day06DjangoPro01urls.py Appviews.py 在项目根目录

    2024年02月10日
    浏览(37)
  • 快速上手Django(九) -Django下载文件、Django上传文件、Django实现excel导入导出

    在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载。 1. Django下载文件方案和思路 将文件作为响应返回给用户:这是最常用的下载文件方法。你可以编写一个视图函数,在该函数中将文件作为响应返回给用户。 使用第三方库,如您需要支持断点续传或并发

    2024年02月05日
    浏览(33)
  • Django 文件上传(十二)

    当 Django 处理文件上传时,文件数据最终会被放置在 request.FILES 。 查看文档:文件上传 | Django 文档 | Django Django工程如下:    创建本地存储目录 在static/应用目录下创建uploads目录用于存储接收上传的文件  在settings.py 配置静态目录和上传目录   1、models.py模型数据 注意:迁

    2024年02月04日
    浏览(28)
  • Django进阶-文件上传

            用户可以通过浏览器将图片等文件上传到网站         用户上传头像         上传流动性的文档【pdf,txt】等 1.视图函数中,用request.FILES取文件框的内容 file = request.FILES[\\\'xxx\\\'] 说明:         1.FILES的key对应页面中file框的name值         2.file绑定文件流对象      

    2024年02月12日
    浏览(91)
  • Django自定义storage上传文件到Minio

    首先新建一个MyStorage.py,自定义Storage类 这么实现 def url(self, name)这个函数,需要在Minio后台将 bucket 权限设置为public,就是开放的所有人皆可访问   Minio实现上传文件,新建minioClient.py   新建一个tools.py   我的models.py   新建一个视图文件     在settings.py中加上     整个项目

    2024年02月06日
    浏览(25)
  • Python web实战之Django的文件上传和处理详解

      :Python Web开发、Django、文件上传、文件处理 今天分享一下Django的文件上传和处理。 在开始深入讲解Django的文件上传和处理之前,先了解一下文件上传的基本原理。当用户选择要上传的文件后,该文件会被发送到服务器端,并存储在服务器的某个位置上。我们需要在

    2024年02月13日
    浏览(33)
  • Django_自定义文件存储类并将图片上传到FastDFS

    目录 将图片到FastDFS和浏览的流程图 使用自定义文件存储类 1、定义存储类 2、创建FastDFS的配置文件 3、修改settings.py配置 4、上传图片进行验证 4.1 定义一个包含ImageField字段的模型类 4.2 登录django的admin后台 4.3 上传图片 4.4 查看图片 源码等资料获取方法 先部署好FastDFS,这个以

    2024年02月15日
    浏览(39)
  • 【Django】Django创建一个文件下载服务

    当使用Django创建一个下载服务时,您可以设置一个视图来处理文件下载请求,并根据您的需求提供文件下载链接。以下是一个简单的示例,演示如何在Django中实现基本的文件下载服务: 创建Django项目和应用: 首先,确保您已经创建了一个Django项目,并在其中创建了一个应用

    2024年02月11日
    浏览(44)
  • 扩展element-ui el-upload组件,实现复制粘贴上传图片文件,带图片预览功能

    控件改造 在窗口的 el-form 控件参数中添加 @paste.native 事件,事件绑定方法名 handlePaste 也可以在其他控件中添加事件监听,看个人需求。 注意: 监听粘贴事件时,需要当前页面先获取焦点,否则无法正常监听, 可以在页面加载后调用 focus() 获取焦点 粘贴功能Js部分参考资料

    2023年04月08日
    浏览(59)
  • 在Django中使用zipfile模块实现对上传的zip压缩包提取文件名

    目录 方法一:解压zip压缩包 思路一:获取带相对路径的文件名 思路二:只获取文件名(不带路径) 方法二:不解压压缩包(推荐) 思路一:获取带相对路径的文件名 思路二:只获取文件名(不带路径) 中文乱码的处理 方式一:解压压缩包(不带路径) 方式二:解压压缩

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包