热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django实战013:各种文件下载功能实现详解

前后端不分离模式前后端不分离指的是将前端的代码嵌套在后端代码中,前端页面看到的效果都是由后端控制,由后端来实现渲染的页面或重定向。在Django中常用语

  前后端不分离模式

  前后端不分离指的是将前端的代码嵌套在后端代码中,前端页面看到的效果都是由后端控制,由后端来实现渲染的页面或重定向。在Django中常用语法中变量相关的用{{}} , 当模版引擎加载到这个变量时计算该变量并用结果替换掉当前变量。逻辑相关的用{% %},当模版引擎加载到这个逻辑时就会根据逻辑来动态的渲染前端代码。

  

  本图来自“互联网”

  使用a标签下载

  在Django中的setting中设置静态路由:STATIC_URL='/static/'和静态目录: STATICFILES_DIRS=[os.path.join(BASE_DIR, "static")],然后将需要下载的文件放置该文件目录下。在前端直接把链接地址指向要下载的静态文件,在页面中点击该链接即可直接下载到本地磁盘中了。

  

  前后端分离模式

  前后端分离将业务逻辑和视图渲染进行了拆分,前后负责页面的展示和数据渲染。好处是可以通过Javascript解决大部分的数据处理工作,减少对服务器的压力。后端则负责业务逻辑和数据的处理,返回前端所需的数据,不再控制渲染前端HTML页面的展示效果。好处是不用再操心前端如何去显示,只要按需求提供接口即可。一套接口可以适用于过个平台使用,提高代码复用性和适用性。大大提高了开发效率。

  

  本图来自“互联网”

  使用HttpResponse下载

  Django在接受到收到客户端发送过来的请求后,会将数据封装成一个HttpRequest对象传给视图函数。当视图函数处理完相关的数据及业务逻辑后需要返回一个响应给浏览器,HttpResponse就是返回对象的一种,HttpResponse会遍历迭代器,调用make_bytes将每个item转换为bytes,再将其拼接为一个字节型字符串对象的内容存储成学历证字符串再回给客户端,这个过程会占用较多的内存。该对象中包含了返回的HTTP响应状态、返回的内容、返回的数据类型等信息。如果你的文件很小可以将文件流放入HttpResponse对象,如果这个文件非常大的话会占用大量内存从而影响服务器性能。

  

  使用StreamingHttpResponse下载

  因为HttpResponse将整个文件打包字符串发送给客户端的,整个过程十分浪费时间和内存的,不仅响应慢而且占用服务器较大内存影响性能,如果需要传输较大的文件话HttpResponse显然是不合适的。StreamingHttpResponse则是将文件内容进行流式传输将文件流发送给浏览器,它将迭代器作为传输内容,遍历每个item并返回数据。

  

  如果每次传输的文件流较大我们可以定义一个临时空间作为缓存,来分段存储迭代器读取内容持续传输数据。这样可以提高页面响应的速度,提高用户体验。

  

  使用FileResponse下载

  FileResponse是在StreamingHttpResponse基础上进行的进一步封装,FileResponse类针对二进制文件进行了优化,可以更好的支持二进制文件的传输。

  

  文件数据模型

  定义模型来保存上传文件的基本信息,包括文件的名字、大小、类型、文件存储路径和创建时间,这里我还定义了一个Md5用来区分文件,防止重复上传相同的文件。定义完之后记得执行迁移命令,同步至数据库:Python manage.py makemigrations 和 python manage.py migrate。

  


推荐阅读
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • Norton Partition Magic 中 PHP 函数 error_reporting(E_ALL ^ E_NOTICE) 的详细解析与应用
    在 Windows 环境下,通过具体示例分析了 `Norton Partition Magic` 中 `PHP` 函数 `error_reporting(E_ALL ^ E_NOTICE)` 的详细解析与应用。该函数用于控制错误报告级别,例如在从 PHP 4.3.0 升级到 4.3.1 后,程序出现多处错误的原因及解决方法。本文深入探讨了错误报告配置对程序稳定性的影响,并提供了实用的调试技巧。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 我正在使用 Ruby on Rails 构建个人网站。总体而言,RoR 是一个非常出色的工具,它提供了丰富的功能和灵活性,使得创建自定义页面变得既高效又便捷。通过利用其强大的框架和模块化设计,我可以轻松实现复杂的功能,同时保持代码的整洁和可维护性。此外,Rails 的社区支持也非常强大,为开发过程中遇到的问题提供了丰富的资源和解决方案。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 本文深入探讨了 Python Watchdog 库的使用方法和应用场景。通过详细的代码示例,展示了如何利用 Watchdog 监控文件系统的变化,包括文件的创建、修改和删除等操作。文章不仅介绍了 Watchdog 的基本功能,还探讨了其在实际项目中的高级应用,如日志监控和自动化任务触发。读者将能够全面了解 Watchdog 的工作原理及其在不同场景下的应用技巧。 ... [详细]
  • Jedis接口分类详解与应用指南
    本文详细解析了Jedis接口的分类及其应用指南,重点介绍了字符串数据类型(String)的接口功能。作为Redis中最基本的数据存储形式,字符串类型支持多种操作,如设置、获取和更新键值对等,适用于广泛的应用场景。 ... [详细]
  • Java 8 引入了 Stream API,这一新特性极大地增强了集合数据的处理能力。通过 Stream API,开发者可以更加高效、简洁地进行集合数据的遍历、过滤和转换操作。本文将详细解析 Stream API 的核心概念和常见用法,帮助读者更好地理解和应用这一强大的工具。 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • 本文详细探讨了如何有效解决Oracle数据库中常见的ORA-01578和ORA-26040错误。这些错误通常与数据块损坏有关,严重影响数据库的稳定性和数据完整性。文章不仅提供了详细的故障诊断步骤,还介绍了多种修复方法,包括使用RMAN工具、手动修复数据块以及预防措施,以帮助数据库管理员高效应对这些问题。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • 在Python 3环境中,当无法连接互联网时,可以通过下载离线模块包来实现模块的安装。具体步骤包括:首先从PyPI网站下载所需的模块包,然后将其传输到目标环境,并使用`pip install`命令进行本地安装。此方法不仅适用于单个模块,还支持依赖项的批量安装,确保开发环境的完整性和一致性。 ... [详细]
author-avatar
乐橙味_367
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有