当前位置: 首页 > news >正文

Django加bootstrap实现上传文件含有进度条

1. 项目结构

myproject/
├── myproject/
│   ├── settings.py
│   ├── urls.py
│   └── ...
├── myapp/
│   ├── templates/
│   │   └── upload.html
│   ├── views.py
│   ├── urls.py
│   └── ...
└── media/          # 手动创建此目录

2. 配置Django设置(settings.py

# settings.py
import osINSTALLED_APPS = ['myapp',  # 确保应用已注册# ...
]MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')# 允许大文件上传(可选)
DATA_UPLOAD_MAX_MEMORY_SIZE = 52428800  # 50MB

3. 路由配置

项目路由(myproject/urls.py
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import staticurlpatterns = [path('', include('myapp.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
应用路由(myapp/urls.py
from django.urls import path
from . import viewsurlpatterns = [path('', views.upload_view, name='upload'),path('upload/', views.file_upload, name='file_upload'),
]

4. 视图逻辑(myapp/views.py

from django.shortcuts import render
from django.http import JsonResponse
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt
import osdef upload_view(request):return render(request, 'upload.html')@csrf_exempt  # 临时禁用CSRF(生产环境需修复)
def file_upload(request):if request.method == 'POST' and request.FILES.get('file'):uploaded_file = request.FILES['file']save_path = os.path.join(settings.MEDIA_ROOT, uploaded_file.name)# 分块写入文件with open(save_path, 'wb+') as destination:for chunk in uploaded_file.chunks():destination.write(chunk)return JsonResponse({'status': 'success','filename': uploaded_file.name})return JsonResponse({'status': 'error'}, status=400)

5. 前端模板(myapp/templates/upload.html

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><!-- Bootstrap 5 --><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"><title>文件上传</title>
</head>
<body><div class="container mt-5" style="max-width: 600px;"><h2 class="mb-4">文件上传演示</h2><!-- 文件选择 --><div class="mb-3"><input type="file" class="form-control" id="fileInput"></div><!-- 进度条 --><div class="progress mb-3" style="height: 25px; display: none;" id="progressContainer"><div id="progressBar" class="progress-bar progress-bar-striped" role="progressbar" style="width: 0%">0%</div></div><!-- 状态提示 --><div id="statusMessage"></div><!-- 上传按钮 --><button class="btn btn-primary" onclick="startUpload()">开始上传</button></div><!-- 依赖库 --><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script><script>function startUpload() {const fileInput = document.getElementById('fileInput');const file = fileInput.files[0];if (!file) {showMessage('请先选择文件!', 'danger');return;}const formData = new FormData();formData.append('file', file);// 显示进度条$('#progressContainer').show();$.ajax({url: '/upload/',type: 'POST',data: formData,contentType: false,    // 必须设置processData: false,  // 必须设置xhr: function() {const xhr = new window.XMLHttpRequest();// 进度事件监听xhr.upload.addEventListener('progress', function(evt) {if (evt.lengthComputable) {const percent = Math.round((evt.loaded / evt.total) * 100);updateProgress(percent);}}, false);return xhr;},success: function(response) {showMessage(`文件 ${response.filename} 上传成功!`, 'success');resetUI();},error: function(xhr) {showMessage('上传失败: ' + (xhr.responseJSON?.status || '服务器错误'), 'danger');resetUI();}});}function updateProgress(percent) {$('#progressBar').css('width', percent + '%').text(percent + '%');}function showMessage(text, type) {const alertClass = `alert alert-${type} alert-dismissible fade show`;$('#statusMessage').html(`<div class="${alertClass}" role="alert">${text}<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>`);}function resetUI() {setTimeout(() => {$('#progressContainer').hide();updateProgress(0);}, 1500);}</script>
</body>
</html>

运行 HTML


6. 运行步骤

创建媒体目录

mkdir media

启动开发服务器

  1. python manage.py runserver
  2. 访问 http://localhost:8000 测试上传功能

关键功能说明

  1. 进度条实现
    • 使用XMLHttpRequest的progress事件监听上传进度
    • 动态更新Bootstrap进度条的宽度和文本
  1. 安全增强(生产环境必做):
    • 移除@csrf_exempt装饰器
    • 在前端添加CSRF Token:
// 在AJAX请求中添加headers
headers: {'X-CSRFToken': document.querySelector('[name=csrfmiddlewaretoken]').value
},
  1. 文件处理
    • 使用file.chunks()分块处理大文件
    • 保存到MEDIA_ROOT指定目录
  1. 用户体验优化
    • 上传完成后的自动状态重置
    • 可关闭的Bootstrap提示组件
    • 进度条动画效果(条纹动画)

常见问题解决

  1. 进度条不更新
    • 检查浏览器控制台是否有CORS错误
    • 确认xhr.upload.addEventListener正确绑定
  1. 文件保存失败
    • 确保MEDIA_ROOT目录存在且有写入权限
    • 检查Django的settings.py配置
  1. CSRF验证失败
    • 在生产环境中务必处理CSRF Token
    • 在模板中添加{% csrf_token %}

通过以上步骤,您可以在Django中实现一个带Bootstrap进度条的文件上传功能,既保证基本功能又具备良好的用户体验。

相关文章:

Django加bootstrap实现上传文件含有进度条

1. 项目结构 myproject/ ├── myproject/ │ ├── settings.py │ ├── urls.py │ └── ... ├── myapp/ │ ├── templates/ │ │ └── upload.html │ ├── views.py │ ├── urls.py │ └── ... └── media/ # 手动创…...

八大排序算法(2)交换排序-冒泡排序 和 快速排序

快速排序&#xff08;Quick Sort&#xff09; 和 冒泡排序&#xff08;Bubble Sort&#xff09; 都是常见的交换排序算法&#xff0c;它们的核心思想都是通过交换元素来实现排序。但是&#xff0c;它们的工作原理和性能差异非常大。下面我们来详细对比这两种排序算法&#xff1…...

Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅

摘要 在当今的编程世界里,Node.js 和 Python 像是两个性格迥异的超级英雄,一个以速度和灵活性著称,另一个则以强大和优雅闻名。本文将探讨如何通过 Express 框架将 Node.js 和 Python 结合起来,打造出一个高效、有趣的 Web 应用。我们将通过一系列幽默风趣的实例和表格,展…...

STM32MP157A单片机移植Linux驱动

在stm32mp157a单片机移植Linux操作系统&#xff0c;并移植内核驱动&#xff0c;在应用程序中使用3个线程&#xff0c;分别实现控制单片机上3个led流水灯的功能、蜂鸣器控制的功能、风扇控制的功能。 需求整理&#xff1a; 1.驱动程序-->led1.c&#xff0c;led2.c&#xff…...

Qt程序退出相关资源释放问题

目录 问题背景&#xff1a; aboutToQuit 代码举例 closeEvent事件 代码举例 程序退出方式 quit() exit(int returnCode 0) close() 问题背景&#xff1a; 实际项目中程序退出前往往需要及进行一些资源释放、配置保存、线程中断等操作&#xff0c;避免资源浪费&#xff…...

【大学生职业规划大赛备赛PPT资料PDF | 免费共享】

自取链接&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/4fa45515325e &#x1f4e2; 同学&#xff0c;你是不是正在为职业规划大赛发愁&#xff1f; 想展示独特思路却不知如何下手&#xff1f; 想用专业模板却找不到资源&#xff1f; 别担心&#xff01;我整理了全网…...

win32汇编环境,对话框中使用菜单示例一

;运行效果 ;win32汇编环境,对话框中使用菜单示例一 ;最基本的应用&#xff0c;即添加菜单及点击后响应的操作方法 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>&g…...

AutoDock CrankPep or ADCP进行蛋白质多肽对接

需求描述 使用AutoDock CrankPep or ADCP进行蛋白质多肽对接 硬件及系统配置 自用电脑型号如下&#xff1a; 电脑&#xff1a;Precision Tower 7810 (Dell Inc.) CPU &#xff1a; Intel Xeon CPU E5-2686 v4 2.30GHz GPU&#xff1a; NVIDIA GeForce GTX 1070 Linux版本&a…...

高压直流熔断器研究

1.1 定义与作用 高压直流熔断器是一种用于直流电路的过电流保护装置&#xff0c;其主要作用是在电路中检测到过载电流或短路电流时&#xff0c;迅速切断电路&#xff0c;以防止电力设备受损或发生火灾等事故。根据 ISO-8820 和 QC/T420-2004 等标准的定义&#xff0c;熔断器是…...

微信小程序(uni)+蓝牙连接+Xprint打印机实现打印功能

1.蓝牙列表实现&#xff0c;蓝牙设备展示&#xff0c;蓝牙连接 <template><view class"container"><view class"container_top"><view class"l">设备名称</view><view class"r">{{state.phoneNam…...

使用 Docker 部署 Flask 应用

使用 Docker 部署 Flask 应用 一、引言 在现代软件开发中,应用的部署和环境管理是至关重要的环节。传统的部署方式常常会遇到 “在我机器上能运行,在你机器上不行” 的问题,而 Docker 的出现很好地解决了这个痛点。Docker 是一个用于开发、部署和运行应用程序的开放平台,…...

深入浅出GraphQL:现代API设计的未来

文章目录 一、引言二、什么是GraphQL&#xff1f;三、GraphQL的优势3.1 精确获取数据3.2 强类型系统3.3 单一端点3.4 实时数据 四、实际应用4.1 定义Schema4.2 实现解析器4.3 启动GraphQL服务器 五、结论 一、引言 在当今的 Web 开发中&#xff0c;API&#xff08;应用程序编程…...

深入理解Zookeeper:分布式系统的协调者

引言 在现代分布式系统中&#xff0c;协调和管理多个节点之间的状态和行为是一个复杂且关键的任务。Zookeeper作为一个分布式协调服务&#xff0c;为开发者提供了一种高效、可靠的方式来处理分布式系统中的一致性问题。本文将介绍Zookeeper的基本概念、使用场景以及如何通过示…...

python绘图之回归拟合图

回归拟合图在数据分析中具有重要作用&#xff0c;它不仅可以帮助我们理解变量之间的关系&#xff0c;还可以评估模型的拟合效果、进行预测和推断、发现异常值&#xff0c;以及用于模型比较和结果展示。 import pandas as pd import seaborn as sns import matplotlib.pyplot as…...

C语言学习笔记(第二部份)

说明&#xff1a;由于所有内容放在一个md文件中会非常卡顿&#xff0c;本文件将接续C.md文件的第二部分 结构体 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构体的成员可以是标量&#xff0c;数组&#xff0c;指针&#xff0c…...

jQuery UI CSS 框架 API

jQuery UI CSS 框架 API 概述 jQuery UI 是一个基于 jQuery 的用户界面和交互库,它提供了一套丰富的交互组件和视觉效果,旨在帮助开发者快速构建具有吸引力和互动性的网页应用。jQuery UI CSS 框架 API 是 jQuery UI 的一部分,它允许开发者通过简单的 CSS 类来控制 UI 组件…...

Redis7——基础篇(六)

前言&#xff1a;此篇文章系本人学习过程中记录下来的笔记&#xff0c;里面难免会有不少欠缺的地方&#xff0c;诚心期待大家多多给予指教。 基础篇&#xff1a; Redis&#xff08;一&#xff09;Redis&#xff08;二&#xff09;Redis&#xff08;三&#xff09;Redis&#x…...

Windows网络安全基础

随着互联网的发展和普及&#xff0c;Windows网络安全问题愈发严重。在本文中&#xff0c;我们将会介绍Windows网络安全的基本概念&#xff0c;包括网络攻击类型、网络安全威胁、网络安全防御措施等等&#xff0c;帮助初学者更好地了解Windows网络安全。 一、网络攻击类型 网络…...

spring boot知识点4

1.如何监视所有spring boot微服务 安装actuator插件&#xff0c;然后通过接口查询 /actuator/health 2.spring boot项目性能如何优化 a.优化启动时间&#xff0c;去除重复的依赖 b.JVM优化&#xff08;java虚拟机优化&#xff09;&#xff0c;限制堆的最小最大值 c.数据库…...

【大模型系列篇】DeepSeek-R1如何通过强化学习有效提升大型语言模型的推理能力?

如何通过强化学习&#xff08;RL&#xff09;有效提升大型语言模型&#xff08;LLM&#xff09;的推理能力&#xff1f; 《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》由DeepSeek-AI团队撰写&#xff0c;主要介绍了他们开发的第一代…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...