项目介绍

最近学习django,通过文件上传下载这个小项目,总结下常用的知识点。
做这个案例我有以下需求:

1.要支持一次上传多个文件

2.支持上传后记录上传的数据以及列表展示

3.支持下载和删除文件记录

效果展示

数据库记录

开发步骤

创建项目:

django-admin startproject file_upload
cd file_upload
python manage.py startapp uploader

目录结构:

0.settings.py

LANGUAGE_CODE = 'zh-Hans'TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = False

1.urls.py

父:

from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('uploader/', include('uploader.urls'))
]

子:

from django.contrib import admin
from django.urls import path, include
from . import viewsapp_name = 'uploader'urlpatterns = [path('', views.upload, name='upload'),  # 上传path('list/', views.list),  # 列表path('download/<id>', views.download, name='download'),  # 下载path('delete/<id>', views.delete, name='delete'),  # 删除
]

2.models.py

from django.db import models
from django.utils import timezone'''
文件记录
'''
class FileInfo(models.Model):file_name = models.CharField(max_length=500)file_size = models.DecimalField(max_digits=10, decimal_places=0)file_path = models.CharField(max_length=500)upload_time = models.DateTimeField(default=timezone.now())

3.forms.py

from django import forms'''
上传表单
'''
class UploadForm(forms.Form):file = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}),  # 支持多文件上传label='选择文件...',help_text='最大100M')

4.views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.http import HttpResponseRedirect
from django.http import FileResponse
from django.template import RequestContext
from django.urls import reverse
from django.utils.http import urlquotefrom .models import FileInfo
from .forms import UploadForm
import os# 上传文件
def upload(request):# Handle file uploadif request.method == 'POST':form = UploadForm(request.POST, request.FILES)if form.is_valid():files = request.FILES.getlist('file')for f in files:file_info = FileInfo(file_name=f.name, file_size=1 if 0 < f.size < 1024 else f.size / 1024, file_path=os.path.join('D:\\upload', f.name))file_info.save()# 上传destination = open(os.path.join("D:\\upload", f.name), 'wb+')for chunk in f.chunks():destination.write(chunk)destination.close()# 返回上传页return HttpResponseRedirect('/uploader/list')else:form = UploadForm()  # A empty, unbound formreturn render(request, 'uploader/upload.html', {'form': form})# 文件列表
def list(request):file_infos = FileInfo.objects.all()return render(request, 'uploader/list.html', {'file_infos': file_infos})# 下载文件
def download(request, id):file_info = FileInfo.objects.get(id=id)print('下载的文件名:' + file_info.file_name)file = open(file_info.file_path, 'rb')response = FileResponse(file)response['Content-Disposition'] = 'attachment;filename="%s"' % urlquote(file_info.file_name)return response# 删除文件
def delete(request, id):file_info = FileInfo.objects.get(id=id)file_info.delete()file_infos = FileInfo.objects.all()return HttpResponseRedirect('/uploader/list')

需要源码的朋友给老徐来个一键三连,留下邮箱安排发送:)

Django实战之文件上传下载相关推荐

  1. 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现

    文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...

  2. springboot文件上传下载实战 ——文件上传、下载、在线打开、删除

    springboot文件上传下载实战 文件上传 文件上传核心 UserFileController 文件上传测试 文件下载与在线打开 文件下载.在线打开核心 UserFileController 文件 ...

  3. springboot文件上传下载实战 —— 登录功能、展示所有文件

    springboot文件上传下载实战 创建项目 pom.xml 数据库建表与环境准备 建表SQL 配置文件 application.properties 整体架构 前端页面 登录页面 login.ht ...

  4. FastDFS实现文件上传下载实战

    正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...

  5. centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  6. 渗透测试-文件上传/下载/包含

    渗透测试-文件上传/下载/包含 概述 一.常见校验上传文件的方法 客户端校验 服务器端校验 1.校验请求头 content-type字段 2. 正则匹配来判断文件幻数(文件头)内容是否符合要求 3. ...

  7. 【Java编程系列】Minio实现文件上传下载

    热门系列: [Java编程系列]Amazon S3实现文件上传下载 目录 热门系列: 1.前言 2.Minio实战代码 2.1 Minio环境部署 2.2 Minio的Sdk对接实现 2.2.1 Mi ...

  8. 教你如何实现c#文件上传下载功能

    简单介绍一下c#文件上传下载功能实现. NuGet 安装SqlSugar Model文件下新建 DbContext 类 public class DbContext {public DbContext ...

  9. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

最新文章

  1. json-schema 简介
  2. c 在realse下为什么生成不了exe_exe文件?你也可以编写!
  3. Executors.newFixedThreadPool和ArrayBlockingQueue一点使用心得
  4. .NET Core 3.0 部署在docker上运行
  5. idea(mac) 使用收集
  6. 评论.gitignore?
  7. 【一起学加密4】一次性密码本
  8. 微软笔试题三道(略微偏向竞赛题)
  9. 混合柯西变异和均匀分布的蝗虫优化算法-附代码
  10. Curse of dimensionality - 维数灾难
  11. 高盛报告:长远看中国网游前景不如门户
  12. wan端口未连接怎么弄_路由器WAN口未连接解决方法,WAN口未连接怎么办
  13. 飞腾服务器如何查看cpu型号,飞腾cpu怎么样 飞腾cpu简介及对比评测【详解】
  14. 基于惯性动捕的动画应用解决方案——3DMAX篇
  15. 潜心专研Python模拟登陆专题,实现网易云音乐自动签到!这项目居然只值三百?
  16. 2019中国大学生程序设计竞赛-女生专场(重现赛)
  17. Vue中的@blur事件
  18. Deepin Linux15 华为荣耀笔记本MagicBook2019使用-安装深度应用商店和应用软件
  19. 计算机更改用户名并更改用户目录,如何修改用户文件夹名?
  20. Flink动态规则实时智能营销系统

热门文章

  1. 如果我使用maya建模软件,就业前景如何?
  2. 十五、帧内编码:1、帧内编码的基本原理
  3. MATLAB数字信号处理(1)四种经典功率谱估计方法比较
  4. SFTP文件上传与下载
  5. 游戏平台搭建——游戏出海怎么做?
  6. webgis入门实战
  7. 关于docker桥接网络,残留网桥影响映射端口访问问题
  8. Win7 Linux双系统,恢复Linux启动项
  9. android版txt电子阅读器(一)
  10. 公网ip与树莓派实现异地访问海康威视摄像头