日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flask开发vip版HttpServer

發(fā)布時(shí)間:2023/12/29 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask开发vip版HttpServer 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
python HttpServer

python2與python3都可以基于SimpleHTTPServer,快速創(chuàng)建一個(gè)http服務(wù)器,但方法略有不同。
首先進(jìn)入你需要設(shè)置的http服務(wù)器目錄 (我以自己電腦路徑:F:/Working~Study) ,即進(jìn)入到該目錄下,然后:

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

使用方式與樣式都是一樣的,如下圖:


python自帶httpserver.gif

用起來沒問題,但丑出天際...
提單時(shí)間到,來說一說有哪些存在的問題吧:

  • 啟動(dòng)服務(wù)器后,無登陸限制,任何人都能訪問
  • 訪問鏈接后,顯示純html頁面,美觀性差,或者說毫無美感可言
  • 非ansi碼的文本打開,都是亂碼
  • 文本與pdf等文件點(diǎn)擊時(shí),默認(rèn)打開而非下載
  • 文件夾與文件的差別僅僅在于是否有末尾/,識(shí)別度差
  • 文件夾與文件的詳細(xì)信息無法獲取(如:創(chuàng)建時(shí)間,大小)
  • 頁面點(diǎn)擊無返回按鈕,只能使用瀏覽器默認(rèn)的前進(jìn)后退
  • 既然python自帶的http服務(wù)器,存在這么多的問題,那決不能慣著它,今天咱們就自己重寫一個(gè)PythonHttpServer。

    FlaskHttpServer效果展示

    先來看看最終的實(shí)現(xiàn)效果:


    FlaskHttpServer.gif
    • 安全
      添加了用戶名密碼的登陸限制(簡單寫死了用戶名密碼,可擴(kuò)展支持?jǐn)?shù)據(jù)庫讀取等方式),這個(gè)就不多說了,想了解的可以看之前發(fā)布的:
      Flask使用Bootstrap模板并引入Ajax后臺(tái)完成數(shù)據(jù)刷新
    • 樣式
      引入了bootstrap的表單樣式,簡潔美觀
    • 下載
      設(shè)置所有文件均直接下載,解決了之前文本等直接打開、并且亂碼的問題
    • 展示
    • 仿照windows系統(tǒng),添加了名稱、修改時(shí)間、文件類型、大小
    • 優(yōu)化了文件夾、文件等展示方式,并針對(duì)兩者進(jìn)行大小寫的模糊排序,
    • 針對(duì)文件大小,優(yōu)化動(dòng)態(tài)展示B、KB、MB、GB
    • 頁面跳轉(zhuǎn)
      增加了首頁,與子路徑的快捷鍵訪問,每一層的路徑均可做為鏈接進(jìn)行跳轉(zhuǎn)
    設(shè)計(jì)方案
  • 使用藍(lán)圖構(gòu)建項(xiàng)目
    雖然目前僅存在賬戶管理與頁面展示和下載兩個(gè)模塊,但使用藍(lán)圖的目的是為了便于擴(kuò)展,后期有空了還可以實(shí)現(xiàn)下上傳功能。
    整體目錄如下:


    項(xiàng)目目錄
  • 針對(duì)目錄展示
    獲取path后,先獲取os.listdir()結(jié)果進(jìn)行排序:
    sorted(os.listdir('.'), key=lambda x: x.lower())
    再將目錄分為兩個(gè)列表(文件夾、文件),并針對(duì)類型不同,分別獲取不同數(shù)據(jù),方法如下:

  • 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中創(chuàng)建自定義過濾器,將所有路徑進(jìn)行拆分,生成子路徑及對(duì)應(yīng)的path進(jìn)行跳轉(zhuǎn)
  • @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

    因?yàn)樯婕暗奈募容^多,就不一個(gè)個(gè)的往上貼了,如果大家對(duì)這個(gè)小項(xiàng)目感興趣,可以公眾號(hào)回復(fù)關(guān)鍵字[服務(wù)器]獲取源碼....

    關(guān)于后續(xù)更新

    最近寫的比較多的就是爬蟲和Flask,感覺有點(diǎn)膩了....
    后續(xù)打算總結(jié)一個(gè)系列的數(shù)據(jù)分析或者selenium....大家覺得哪個(gè)比較感興趣,我就先開始搞哪個(gè)系列...

    今天的內(nèi)容就到這里,如果覺得有幫助,歡迎將文章或者我的公眾號(hào)【清風(fēng)Python】分享給更多喜歡python的人。
    畢竟像我這種瘋狂天天更新,還都是原創(chuàng)的公眾號(hào),你們很少見吧....哈哈
    你也可以點(diǎn)擊右下角的在看,讓我知道你來過...
    公眾號(hào)內(nèi)有整理好的各類福利書籍供大家下載,還想要更多的可以私信我,記得掃碼關(guān)注:

    清風(fēng)Python

    總結(jié)

    以上是生活随笔為你收集整理的Flask开发vip版HttpServer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。