前言
笔者之前自学了下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程序保存能成功。
以上就是对文件分享系统的一个简单分析,下一篇文章讲解代码的实现。