python HttpServer
python2与python3都可以基于SimpleHTTPServer,快速创建一个http服务器,但方法略有不同。
首先进入你需要设置的http服务器目录 (我以自己电脑路径:F:/Working~Study) ,即进入到该目录下,然后:
- python2:
python -m SimpleHTTPServer 8888
- python3:
python -m http.server 8888
使用方式与样式都是一样的,如下图:
用起来没问题,但丑出天际…
提单时间到,来说一说有哪些存在的问题吧:
- 启动服务器后,无登陆限制,任何人都能访问
- 访问链接后,显示纯html页面,美观性差,或者说毫无美感可言
- 非ansi码的文本打开,都是乱码
- 文本与pdf等文件点击时,默认打开而非下载
- 文件夹与文件的差别仅仅在于是否有末尾/,识别度差
- 文件夹与文件的详细信息无法获取(如:创建时间,大小)
- 页面点击无返回按钮,只能使用浏览器默认的前进后退
既然python自带的http服务器,存在这么多的问题,那决不能惯着它,今天咱们就自己重写一个PythonHttpServer。
FlaskHttpServer效果展示
先来看看最终的实现效果:
- 安全
添加了用户名密码的登陆限制(简单写死了用户名密码,可扩展支持数据库读取等方式),这个就不多说了,想了解的可以看之前发布的:
Flask使用Bootstrap模板并引入Ajax后台完成数据刷新 - 样式
引入了bootstrap的表单样式,简洁美观 - 下载
设置所有文件均直接下载,解决了之前文本等直接打开、并且乱码的问题 - 展示
- 仿照windows系统,添加了名称、修改时间、文件类型、大小
- 优化了文件夹、文件等展示方式,并针对两者进行大小写的模糊排序,
- 针对文件大小,优化动态展示B、KB、MB、GB
- 页面跳转
增加了首页,与子路径的快捷键访问,每一层的路径均可做为链接进行跳转
设计方案
-
使用蓝图构建项目
虽然目前仅存在账户管理与页面展示和下载两个模块,但使用蓝图的目的是为了便于扩展,后期有空了还可以实现下上传功能。
整体目录如下:
-
针对目录展示
获取path后,先获取os.listdir()结果进行排序:
sorted(os.listdir('.'), key=lambda x: x.lower())
再将目录分为两个列表(文件夹、文件),并针对类型不同,分别获取不同数据,方法如下:
class DocumentReader: