python HttpServer

python2与python3都可以基于SimpleHTTPServer,快速创建一个http服务器,但方法略有不同。
首先进入你需要设置的http服务器目录 (我以自己电脑路径:F:/Working~Study) ,即进入到该目录下,然后:

  • python2: python -m SimpleHTTPServer 8888
  • python3: python -m http.server 8888

使用方式与样式都是一样的,如下图:

python自带httpserver.gif

用起来没问题,但丑出天际...
提单时间到,来说一说有哪些存在的问题吧:

  1. 启动服务器后,无登陆限制,任何人都能访问
  2. 访问链接后,显示纯html页面,美观性差,或者说毫无美感可言
  3. 非ansi码的文本打开,都是乱码
  4. 文本与pdf等文件点击时,默认打开而非下载
  5. 文件夹与文件的差别仅仅在于是否有末尾/,识别度差
  6. 文件夹与文件的详细信息无法获取(如:创建时间,大小)
  7. 页面点击无返回按钮,只能使用浏览器默认的前进后退

既然python自带的http服务器,存在这么多的问题,那决不能惯着它,今天咱们就自己重写一个PythonHttpServer

FlaskHttpServer效果展示

先来看看最终的实现效果:

FlaskHttpServer.gif
  • 安全
    添加了用户名密码的登陆限制(简单写死了用户名密码,可扩展支持数据库读取等方式),这个就不多说了,想了解的可以看之前发布的:
    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))
  1. 在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. Flask开发VIP版HttpServer #华为云·寻找黑马程序员#

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  2. 用Flask开发Web版日历应用

    Python Calender模块 python的日历模块Calender提供了多种日历展示模式: 参数 说明 示例 calendar.calendar(year) 输出某一年的日历 calendar ...

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

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

  4. 基于Flask开发企业级REST API应用(一)

    关于我 编程界的一名小小程序猿,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:github.com/hy ...

  5. flask开发桌面应用程序_使用Microsoft Authenticatio将多个破折号应用程序嵌入Flask中...

    flask开发桌面应用程序 Full disclosure: I am not an expert in developing web applications. I don't even consi ...

  6. PHPYUN人才招聘系统 V5.0商业授权vip版和授权版及旗舰版有什么区别

    最近公司开始运营人才系统了,购买采购的担子就跑到我身上了,前后测试了几款人才系统包括PHPYUN 还有骑士等等,综合来看无论功能还是开发团队实力及售后反馈来看还是感觉PHPYUN比较靠谱,那问题来了, ...

  7. 利用135编辑器快速开发手机版网页

    想了解更多,可前往最新个人博客:Amaya丶夜雨博客   或访问主页:https://www.amayaliu.cn 注:适合现时代公司推广,新媒体人群,及涉及一点编码却想快速开发的从业人员. 昨天在 ...

  8. Flask开发系列之Web表单

    Flask开发系列之Web表单 简单示例 from flask import Flask, request, render_templateapp = Flask(__name__) @app.rou ...

  9. flask开发问题小记

    前因 最近在使用flask开发一个APP的后端时出现了一些小问题.我使用sqlalchemy建立了如下多对多关系: 中间表 user_manager_group = db.Table('manage_ ...

最新文章

  1. ITU-T Technical Paper: QoS 测量 (目标,方法,协议)
  2. [三个版本]自定义int()函数(Python实现)
  3. 扫描枪读条码数据在单片机串口电路的读取与显示
  4. MySQL查看表占用空间大小
  5. android屏幕适配流程,Android屏幕适配姿势
  6. 华为机试HJ105:记负均正II
  7. 51nod 1067 Bash游戏 V2 博弈
  8. 2022年电子商务概论(农)之形考作业二
  9. Android 权限适配 从此第三方系统新增的权限无法判断状态的问题得到解决! 如MIUI自启动, 后台弹出界面权限等
  10. c3 linearization详解
  11. 安装oracle客户端此先决条件,xp系统下oracle 11g客户端安装先决条件检查全部失败...
  12. 秀动app抢票脚本_程序员硬核quot;Python抢票教程”,帮你抢回家车票
  13. 课题:修改ssh的访问端口
  14. 医美整形机构业务流程讲解
  15. CVE-2020-1472 Netlogon权限提升漏洞分析
  16. 深度学习中的正则化方法
  17. 【吉大刘大有数据结构绿皮书】向LinkedList类中增加一个函数Contrary,功能为将其所有结点按相反次序链接。
  18. 《软件工程与计算(卷二)》-Chapter9-10-软件体系结构
  19. 如何用CropBox实现头像裁剪并与java后台交互
  20. CSS截字符串,表格英文强制换行

热门文章

  1. Landslide detection from an open satellite imagery 使用注意力增强卷积神经网络从开放的卫星图像和数字高程模型数据集检测滑坡
  2. python里while 1是什么意思_关于python:“ while 1”和“ while True”之间有什么区别?...
  3. 2017北大信科夏令营机试B:编码字符串
  4. 称重传感器及HX711 24位ADC的重量参数检测
  5. python教学视频o_清华尹成python入门教程
  6. 日记侠:朋友圈总点赞的人是什么心态?
  7. 友盟集成小米华为(快速集成和厂商通道集成)
  8. 哈工大计算机网络第二章——应用层复习
  9. NNDL 实验八 网络优化与正则化(3)不同优化算法比较
  10. 中山积分制入户,有哪些职业资格或专业技术职称能加分