【Flask项目】文件分享系统(一)

前言

笔者之前自学了下Python的轻量级Web框架Flask,学编程大家都知道,不动手实操都是假把式,这样造成的结果就是,你觉得看懂了,也听会了,但是让你自己开做个工具或项目,就是无从下手。因此,笔者在学了Flask后,想实操一下,便想到了基于flask开发个文件分享系统出来,一是为了局域网内跨设备传输方便,二是为了练习Flask。目标确立了,下面开始实操。步骤就按常规的软件开发步骤走,显示需求分析确定功能,然后对功能进行设计,再到编码实现。

需求分析

基于Flask做,那肯定是Web的应用,但是笔者并没有系统学过Web前端开发,所以只能做简单的页面,由于主要目的是学Flask,而不是前端,页面就简单点儿吧。
既然是文件分享系统,那首先要能读目录下的文件,还要提供下载功能,只能查看那不能叫分享。其次,不能只自己的文件让别人下载,别人有好的文件需要分享给自己,需要可以上传。
经过分析,那这个文件分享系统就要具备以下功能:

  • 读取目录下的文件
  • 读取目录下的文件夹
  • 文件下载
  • 文件上传

基本功能就这几个,看似应该很简单,实际就是这么简单。基本功能确定了,那么在Flask中如何实现呢?

功能设计

在《[Flask笔记]一个完整的Flask程序》文章中说过,Web访问后端的Flask程序是通过路由访问到视图函数的,如果要实现目录的浏览、文件的上传下载,就都需要定义好路由,这里需要定义三个路由,分别实现目录的浏览、文件的下载和文件的上传。

目录浏览

首先我们要指定浏览哪个目录,然后再获取这个目录下的所有文件夹和文件,将内容返给浏览器,浏览器拿到数据后对内容进行渲染,展现在用户面前。这里需要用到Flask的模板功能,将内容传给Web页面。

文件下载

用户选择想要下载的文件后,点击下载,浏览器需要将要下载的文件路径和文件名告诉后端Flask程序,Flask将文件发送给浏览器,让用户下载。这里需要用到Flask提供的send_from_directory()函数,来把文件发送给浏览器。

文件上传

文件上传需要用户选择要上传的文件,点击上传按钮后,浏览器把这个文件发生给Flask程序,Flask程序从请求中拿到文件后,对其进行保存,然后再重新刷新页面,让用户能看到新上传的文件,上传文件应该有个进度条显示,但是由于那个相对复杂些,后面有时间再增加该功能。这里需要用到Flask提供的secure_filename()函数功能,保证上传的文件名的安全,让其中不会包含特殊字符等内容,保证Flask程序保存能成功。

以上就是对文件分享系统的一个简单分析,下一篇文章讲解代码的实现。

相关推荐

  1. Flask项目文件分享系统

    2024-07-16 05:36:01       29 阅读
  2. Flask项目文件分享系统(二)

    2024-07-16 05:36:01       20 阅读
  3. 项目文档分享

    2024-07-16 05:36:01       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 05:36:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 05:36:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 05:36:01       58 阅读
  4. Python语言-面向对象

    2024-07-16 05:36:01       69 阅读

热门阅读

  1. Barabási–Albert模型详解与Python代码示例

    2024-07-16 05:36:01       26 阅读
  2. Android12 禁用adb

    2024-07-16 05:36:01       23 阅读
  3. 深度学习多任务学习笔记

    2024-07-16 05:36:01       25 阅读
  4. [C/C++入门][变量和运算]8、鸡兔同笼

    2024-07-16 05:36:01       20 阅读
  5. 在 Spring Boot 中使用 WebSocket 构建在线日志系统

    2024-07-16 05:36:01       20 阅读
  6. Eureka服务发现深度配置:实例ID与租约续期策略

    2024-07-16 05:36:01       27 阅读
  7. Android原生输入法输入数字

    2024-07-16 05:36:01       23 阅读
  8. 【面试题】手撕缓存LRU

    2024-07-16 05:36:01       29 阅读
  9. RocketMQ消费者依赖的业务Bean还未初始化完成

    2024-07-16 05:36:01       22 阅读
  10. 大数据如何推动工业数字化发展

    2024-07-16 05:36:01       23 阅读
  11. 【AI绘画教程】什么是Huggingface

    2024-07-16 05:36:01       26 阅读
  12. python开发面试-20240715

    2024-07-16 05:36:01       24 阅读