欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字“加群”,加入华为云线上技术讨论群;输入关键字“最新活动”,获取华为云最新特惠促销。华为云诸多技术大咖、特惠活动等你来撩!

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的表单样式,简洁美观

  • 下载

设置所有文件均直接下载,解决了之前文本等直接打开、并且乱码的问题

  • 展示
  1. 仿照windows系统,添加了名称、修改时间、文件类型、大小
  2. 优化了文件夹、文件等展示方式,并针对两者进行大小写的模糊排序,
  3. 针对文件大小,优化动态展示B、KB、MB、GB
  • 页面跳转

增加了首页,与子路径的快捷键访问,每一层的路径均可做为链接进行跳转

设计方案

  1. 使用蓝图构建项目

虽然目前仅存在账户管理与页面展示和下载两个模块,但使用蓝图的目的是为了便于扩展,后期有空了还可以实现下上传功能。

整体目录如下:

2.针对目录展示

获取path后,先获取os.listdir()结果进行排序:

sorted(os.listdir('.'), key=lambda x: x.lower())

再将目录分为两个列表(文件夹、文件),并针对类型不同,分别获取不同数据,方法如下:

class DocumentReader:def __init__(self, real_path):self.real_path = real_pathdef analysis_dir(self):dirs = []files = []os.chdir(self.real_path)for name in sorted(os.listdir('.'), key=lambda x: x.lower()):_time = time.strftime("%Y/%m/%d %H:%M", time.localtime(os.path.getctime(name)))if os.path.isdir(name):dirs.append([name, _time, '文件夹', '-'])elif os.path.isfile(name):file_type = os.path.splitext(name)[1]size = self.get_size(os.path.getsize(name))files.append([name, _time, file_type, size])return dirs, files@staticmethoddef get_size(size):if size < 1024:return '%d  B' % sizeelif 1024 <= size < 1024 * 1024:return '%.2f KB' % (size / 1024)elif 1024 * 1024 <= size < 1024 * 1024 * 1024:return '%.2f MB' % (size / (1024 * 1024))else:return '%.2f GB' % (size / (1024 * 1024 * 1024))

3.在app中创建自定义过滤器,将所有路径进行拆分,生成子路径及对应的path进行跳转

    @app.template_filter("split_path")def split_path(path):path_list = path.split('/')path_list = [[path_list[i - 1], '/'.join(path_list[:i])] for i in range(1, len(path_list)+1)]return path_list

因为涉及的文件比较多,就不一个个的往上贴了,如果大家对这个小项目感兴趣,可以公众号回复关键字**[服务器]**获取源码…

关于后续更新

最近写的比较多的就是爬虫和Flask,感觉有点腻了…

后续打算总结一个系列的数据分析或者selenium…大家觉得哪个比较感兴趣,我就先开始搞哪个系列…

今天的内容就到这里,如果觉得有帮助,欢迎将文章或者我的公众号【清风Python】分享给更多喜欢python的人。

来源:华为云社区征文 作者:清风Python

Flask开发VIP版HttpServer #华为云·寻找黑马程序员#相关推荐

  1. 移动端开发语言的未来的猜想#华为云·寻找黑马程序员#

    [摘要] #华为云.寻找黑马程序员# 不管是最早的Phonegap,还是后来的React Native.Weex,Flutter,或者是各个公司自创开发语言,都是在不断寻求开发语言统一,从而解决ios ...

  2. 三伏天里小试牛刀andriod开发 #华为云·寻找黑马程序员#

    三伏天里小试牛刀andriod 开发 #华为云·寻找黑马程序员# 2019年07月,北京,三伏天,好热啊.越热自己还越懒得动换(肉身给的信号),但是做为产品经理/交互设计师的,总想着思考些什么(灵魂上 ...

  3. Flask使用bootstrap为HttpServer添加上传文件功能 #华为云·寻找黑马程序员#

    一句题外话 昨天是老妈的生日,可惜周一上班没有办法为她庆生,只能电话问候下.但还是在这里补说一句"生日快乐!"(ps:我妈每天都会看我的公众号,哈哈-) 提个小需求 今天朋友说,之 ...

  4. 车标知识学习网页开发,与Flask通过base64展示二进制图片 #华为云·寻找黑马程序员#

    万法同源 一直觉得可能自己不太适合搞技术,更适合在天桥底下支个摊子说书.技术的东西从来没人关注,扯东扯西的文章莫名的火.之前的一篇文章MarkDown添加图片的三种方式不管是在技术为主的CSDN还是娱 ...

  5. Flask开发成语接龙游戏,以后闲了手机玩玩自己写的游戏吧!#华为云·寻找黑马程序员#

    文章目录 明天你好,我叫干不倒 英语单词学习应用 成语接龙 接龙规则 实现分析 数据库信息 登陆排行 游戏界面 成语判断 拼音识别 代码编写 Jinjia2模板 Flask装饰器 游戏演示 手机搭建项 ...

  6. 三伏天里小试牛刀andriod 开发 #华为云·寻找黑马程序员#

    2019年07月,北京,三伏天,好热啊.越热自己还越懒得动换(肉身给的信号),但是做为产品经理/交互设计师的,总想着思考些什么(灵魂上给的信号),或者是学习些什么,更有利于将来的职业发展吧,哈哈哈.工 ...

  7. 使用Python开发小说下载器,不再为下载小说而发愁 #华为云·寻找黑马程序员#

    需求分析 免费的小说网比较多,我看的比较多的是笔趣阁.这个网站基本收费的章节刚更新,它就能同步更新,简直不要太叼.既然要批量下载小说,肯定要分析这个网站了- 在搜索栏输入地址后,发送post请求获取数 ...

  8. 爬虫新宠requests_html 带你甄别2019虚假大学 #华为云·寻找黑马程序员#

    python模块学习建议 学习python模块,给大家个我自己不专业的建议: 养成习惯,遇到一个模块,先去github上看看开发者们关于它的说明,而不是直接百度看别人写了什么东西.也许后者可以让你很快 ...

  9. 【带着canvas去流浪(13)】用Three.js制作简易的MARVEL片头动画(下)#华为云·寻找黑马程序员#

    [摘要] three.js实现的Web 3D字体模型动画 示例代码托管在:http://www.github.com/dashnowords/blogs 有了上一篇基础知识的储备,本节就来制作一下简易 ...

最新文章

  1. 让机器学习自动帮我们建模,这4个Python库能让你大开眼界
  2. 大江大海2018: 冲浪科技之巅不可错过的十大数字前沿趋势
  3. mapreduce编程实例(1)-统计词频
  4. 世界不乏爱因斯坦,缺乏的适合他茁壮成长的环境
  5. Game On Serverless:SAE 助力广州小迈提升微服务研发效能
  6. [云炬创业基础笔记]第六章商业模式测试1
  7. AI基础:机器学习简易入门
  8. 插入数据到hive_Hive实现网站PV分析
  9. 二十一、文本情感分类二
  10. Linux 2.6内核中新的锁机制--RCU [转]
  11. PAT_B_1082_C++(20分)
  12. poxtfix+dovecot+saslauthd+courier-authlib +mysql + extmail 完整虚拟邮箱系统部署
  13. in band out of band
  14. Github 用户喊话微软:放弃 ICE 吧,不然会失去我们的
  15. Azkaban的Web Server源码探究系列22: 一次性执行execute的提交准备
  16. 2018春招-赛码网-例题-水仙花数
  17. 高校图书馆管理系统 php 漏洞,Libsys图书管理系统 V5.5 变量覆盖漏洞
  18. 记七彩虹刷bios问题
  19. 11-新闻发布系统数据库-新闻数据操作
  20. 微信公众号菜单外链怎么做

热门文章

  1. python中如何快速注释_python中如何快捷添加注释
  2. grafana实现java后端登录_grafana使用gitLab 的OAuth2认证服务登陆
  3. python远程执行linux命令256_python远程操作Linux——使用paramiko库
  4. html td中加label,html – td对齐内的2个标签
  5. Ubuntu下deb与rpm包的安装方法
  6. 小K的农场(差分约束)
  7. Vim自动补全神器YouCompleteMe的配置
  8. CodeForces 314C 树状数组 + dp
  9. [翻译] DoImagePickerController
  10. 【android】string.xml中的一些错误