欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Flask开发vip版HttpServer

发布时间:2023/12/29 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Flask开发vip版HttpServer 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
python HttpServer

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

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

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


python自带httpserver.gif

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

  • 启动服务器后,无登陆限制,任何人都能访问
  • 访问链接后,显示纯html页面,美观性差,或者说毫无美感可言
  • 非ansi码的文本打开,都是乱码
  • 文本与pdf等文件点击时,默认打开而非下载
  • 文件夹与文件的差别仅仅在于是否有末尾/,识别度差
  • 文件夹与文件的详细信息无法获取(如:创建时间,大小)
  • 页面点击无返回按钮,只能使用浏览器默认的前进后退
  • 既然python自带的http服务器,存在这么多的问题,那决不能惯着它,今天咱们就自己重写一个PythonHttpServer

    FlaskHttpServer效果展示

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


    FlaskHttpServer.gif
    • 安全
      添加了用户名密码的登陆限制(简单写死了用户名密码,可扩展支持数据库读取等方式),这个就不多说了,想了解的可以看之前发布的:
      Flask使用Bootstrap模板并引入Ajax后台完成数据刷新
    • 样式
      引入了bootstrap的表单样式,简洁美观
    • 下载
      设置所有文件均直接下载,解决了之前文本等直接打开、并且乱码的问题
    • 展示
    • 仿照windows系统,添加了名称、修改时间、文件类型、大小
    • 优化了文件夹、文件等展示方式,并针对两者进行大小写的模糊排序,
    • 针对文件大小,优化动态展示B、KB、MB、GB
    • 页面跳转
      增加了首页,与子路径的快捷键访问,每一层的路径均可做为链接进行跳转
    设计方案
  • 使用蓝图构建项目
    虽然目前仅存在账户管理与页面展示和下载两个模块,但使用蓝图的目的是为了便于扩展,后期有空了还可以实现下上传功能。
    整体目录如下:


    项目目录
  • 针对目录展示
    获取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))
  • 在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的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。