我的第一個開源項目:用Python搭建輕量級靜態網頁服務器—— 零基礎也能實現的Web開發初體驗

一、為什么選擇靜態服務器?
  1. 極簡高效:無需數據庫或復雜后端邏輯,適合展示簡歷、作品集等靜態內容

  2. 學習曲線平緩:是理解HTTP協議和Web服務原理的最佳入門方式

  3. 資源消耗低:單文件Python腳本即可運行,內存占用小于10MB

    二、完整開發流程(含代碼逐行解析)
    第一步:創建項目結構
    PWS/                  # 項目根目錄  
    ├── static/           # 靜態資源文件夾  
    │   ├── index.html    # 主頁  
    │   ├── style.css     # 樣式表  
    │   └── script.js     # 交互腳本  
    └── server.py         # Python服務器腳本
    第二步:編寫基礎網頁(static/index.html)
    <!DOCTYPE html>
    <html>
    <head><title>我的首個Python網站</title><link rel="stylesheet" href="/static/style.css">
    </head>
    <body><div class="container"><h1>Hello PWS!</h1><p>Python靜態服務器運行成功</p><button id="actionBtn">點擊驗證</button></div><script src="/static/script.js"></script>
    </body>
    </html>
    第三步:添加樣式(static/style.css)
    body {font-family: 'Segoe UI', sans-serif;background: #f0f2f5;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;
    }.container {background: white;border-radius: 10px;box-shadow: 0 5px 15px rgba(0,0,0,0.1);padding: 2rem;text-align: center;
    }#actionBtn {background: #4CAF50;color: white;border: none;padding: 12px 24px;border-radius: 5px;cursor: pointer;font-size: 1rem;transition: background 0.3s;
    }#actionBtn:hover {background: #45a049;
    }
    第四步:添加交互(static/script.js)
    document.getElementById('actionBtn').addEventListener('click', () => {alert('JavaScript與Python服務器協同工作正常!');document.body.style.backgroundColor = '#e3f2fd';
    });
    第五步:核心服務器代碼(server.py)
    import http.server
    import socketserver# 配置參數
    PORT = 8000  # 可修改端口
    STATIC_DIR = "static"  # 靜態文件目錄# 自定義請求處理器
    class StaticHandler(http.server.SimpleHTTPRequestHandler):def __init__(self, *args, **kwargs):super().__init__(*args, directory=STATIC_DIR, **kwargs)# 覆蓋日志輸出格式def log_message(self, format, *args):print(f"[{self.log_date_time_string()}] {self.client_address[0]} - {format%args}")# 啟動服務器
    try:with socketserver.TCPServer(("", PORT), StaticHandler) as httpd:print(f"\n🚀 服務器已啟動 | 訪問地址: http://localhost:{PORT}")print(f"📁 靜態目錄: /{STATIC_DIR} | 終止服務: Ctrl+C")httpd.serve_forever()
    except KeyboardInterrupt:print("\n🔴 服務器已停止")
    except Exception as e:print(f"? 啟動錯誤: {str(e)}")
    三、關鍵技術原理解析
  4. HTTP請求處理流程

    客戶端請求 → 路由匹配 → 讀取文件 → 返回HTTP響應

  5. MIME類型自動識別
    Python根據文件擴展名自動設置Content-Type:

    • .html → text/html

    • .css → text/css

    • .js → application/javascript

  6. 跨平臺兼容
    代碼在Windows/macOS/Linux均可運行,無第三方依賴

    四、運行與測試指南
  7. 啟動服務器

    cd /項目路徑/PWS
    python server.py

  8. 瀏覽器測試
    打開?http://localhost:8000?將看到:

  9. 居中顯示的卡片式布局

  10. 點擊按鈕觸發JavaScript彈窗

  11. 頁面背景色動態變化

  12. 終端輸出示例

    [30/Jun/2025 15:30:45] 127.0.0.1 - "GET /static/index.html HTTP/1.1" 200
    [30/Jun/2025 15:30:46] 127.0.0.1 - "GET /static/style.css HTTP/1.1" 200
    五、進階擴展方向
  13. 路由增強?- 添加自定義404頁面

    class StaticHandler(...):def do_GET(self):try:super().do_GET()except FileNotFoundError:self.send_response(404)self.send_header('Content-type', 'text/html')self.end_headers()self.wfile.write(b'<h1>頁面不存在</h1>')
  14. 性能優化?- 啟用緩存控制

    self.send_header("Cache-Control", "public, max-age=3600")  # 1小時緩存

  15. 安全加固?- 防止目錄遍歷

    if ".." in self.path:self.send_error(403, "禁止訪問上級目錄")
    六、項目開源建議
  16. GitHub倉庫規范

    • 添加README.md項目說明

    • 創建.gitignore忽略臨時文件

    • 增加requirements.txt保持環境純凈(本項目無需)

  17. 文檔示例(README.md模板)

    # Python靜態網頁服務器(PWS)## ? 功能特性
    - 零配置啟動
    - 自動MIME類型識別
    - 實時請求日志## 🚀 快速開始
    ```bash
    git clone https://github.com/yourname/PWS
    cd PWS
    python server.py

    ?開源協議

    MIT License

    
    ---> **給新手的鼓勵**:我的第一個開源項目雖小,但包含了Web開發的核心要素。當在瀏覽器看到自己的代碼運行起來時,那種成就感無與倫比!建議從這個小項目出發,逐步添加新功能(如文件上傳、API路由等)。記住每個開發者都從"Hello World"開始,**你已邁出最重要的第一步**!  (博客完整代碼已托管至GitHub:[https://github.com/youzenghe/PWS](https://github.com/youzenghe/PWS)  ---這篇博客包含:  
    ? 完整可運行的代碼示例  
    ? 文件結構可視化說明  
    ? 交互式組件演示  
    ? 錯誤處理指導  
    ? 開源項目管理建議  
    ? 擴展開發方向  您可以直接復制所有代碼文件到本地運行,后續可通過修改static目錄中的文件實時更新網站內容。歡迎在博客評論區分享你的實現體驗!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89227.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89227.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89227.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

github 圖床使用免費CDN加速(jsdelivr)

github做圖床大部分人都知道&#xff0c;但是國內訪問速度不穩定&#xff0c;所以使用jsdelivr加速。 jsdelivr是什么呢&#xff1f;它是一個免費、快速和可信賴的CDN加速服務&#xff0c;直接集成在github中的&#xff0c;無需額外操作即可使用。 本文分兩部份&#xff0c;最…

lte高階調制和AMC

文章目錄 LTE高階調制AMC LTE高階調制 首先什么是調制?調制是把通信系統中的基帶信號&#xff08;低頻&#xff09;轉化成適合信道傳輸的高頻信號的過程。 波長&#xff08;λ&#xff09;與頻率&#xff08;f&#xff09; 基本關系&#xff1a; λc/f&#xff0c;λc/f&…

shardingsphere5.2.1與SpringBoot3.X的版本沖突問題

1.先說一下我的版本配置與遇到的問題 問題產生的依賴和版本&#xff1a; 主要依賴依賴版本jdk17SpringBoot 3.3.13shardingsphere-jdbc 5.2.1 問題產生的原因&#xff1a; 主要就是shardingsphere-jdbc 與SpringBoot版本沖突&#xff0c;因為Spring Boot 需要 SnakeYAML 庫來解…

FPGA控制88E1512 PHY芯片完成網絡通信

一、88E1512分析 本文不對88E1512進行詳細解析&#xff0c;僅對調試過程中重點使用的幾個寄存器進行說明。 1.1 MDIO時序分析 根據手冊&#xff0c;MDIO時序中&#xff0c;mdc時鐘最高為12Mhz。占空比和建立保持時間要求可以觀察上述表格。 MDIO的讀數據時序圖如下&#xff1a…

Ai大模型 - ocr圖像識別形成結構化數據(pp-ocr+nlp結合) 以及訓練微調實現方案(初稿)

全局目錄,一步到位 功能流程第一階段 基于現有條件進行 調研,測試與評估1.1 ocr深度學習模型 pp-ocr1.2 nlp結構化模型1.3 硬件要求: 第二階段 模型訓練微調2.1 更換ocr-GPU模型, 下載相關環境2.2 nlp模型 語義訓練2.3 最低硬件要求:2.4 樣本數據: (重點)2.5 進一步增強模型能力…

【Linux】軟硬鏈接,動靜態庫

目錄 一、認識一下常用指令 1、建立一個軟鏈接 2、建立一個硬鏈接 3、刪除文件的第二種方式&#xff1a;刪除鏈接unlink指令 二、什么是硬鏈接&#xff1f; 三、軟硬鏈接的原理&#xff1a; 四、應用場景 1、建立一個軟鏈接可以快速在一個比較深的路徑中找到目標文件進行…

VRR(可變刷新率)和QMS(快速媒體切換)

&#x1f527; 一、技術原理的本質區別 技術VRR (可變刷新率)QMS (快速媒體切換)核心目標消除動態幀率波動導致的畫面撕裂/卡頓消除靜態幀率切換時的黑屏中斷工作機制實時調整顯示器刷新率&#xff08;Hz&#xff09;匹配GPU輸出幀率&#xff08;FPS&#xff09;→ 動態延長/縮…

GO 語言學習 之 Map

map 是 Go 語言中非常重要的數據結構&#xff0c;常用于需要快速查找、統計或分組數據的場景。 map定義&#xff1a; package mainimport "fmt"func main() {var m1 map[int]string // 創建一個 mapm2 : make(map[int]string) // 創建一個 map m3…

什么是可觀測性?監控、日志、追蹤三者之間有什么區別?

一、引言&#xff1a;為什么現代系統需要“看得見”&#xff1f; 你是否遇到過這樣的情況&#xff1a;系統運行突然變慢&#xff0c;但沒人知道問題出在哪&#xff1f;隨著微服務、云原生架構的普及&#xff0c;系統的復雜度越來越高&#xff0c;傳統的“靠經驗判斷”已經無法…

扣子(coze)實戰|自動搬運+改寫+歸檔!自媒體矩陣終極方案

今天給大家分享的是用coze做一個工作流來自動提取抖音/小紅書視頻文案及改寫并傳入到飛書多維表格&#xff0c;我們先來看案例 上傳視頻鏈接即可一鍵生成&#xff0c;廢話不多說&#xff0c;上教程~ 一、整體工作流如下&#xff1a; 二、開發思路&#xff1a; 三、詳細工作流分…

K8s環境下基于Nginx WebDAV與TLS/SSL的文件上傳下載部署指南

#作者&#xff1a;閆乾苓 文章目錄 1.問題及背景2.方案說明3.部署步驟3.1 制作TLS/SSL私有證書3.2 創建訪問nginx賬戶密碼文件并創建secret3.3 為TLS/SSL私有證書創建secret3.4 為Nginx 配置文件創建confimap3.5 使用deployment&#xff0c;svc部署nginx3.6 客戶端curl上傳下載…

【Day 7-N17】Python函數(1)——函數定義、位置參數調用函數、關鍵字參數調用函數、函數的默認值

挑戰14天學會Python&#xff0c;第7天學習筆記&#xff01;加油&#xff01; 一、概述 函數&#xff08;Function&#xff09;是 Python 中用于封裝可重用代碼塊的基本結構。通過定義函數&#xff0c;我們可以將復雜邏輯拆分為更小、更易管理的單元&#xff0c;并通過參數傳遞…

STM32 驅動 ADS1015 單端 差分 多通道模式 ADC 轉換

文章目錄 一、ADS1015簡介二、引腳功能三、寄存器介紹1.Conversion Register 轉化數據存放寄存器2.Config Register 配置寄存器 四、IIC時序1.寫寄存器2.讀寄存器 五、程序六、實驗現象1.單端模式2.差分模式3.偽多通道模式 一、ADS1015簡介 ADS1015 是一款由德州儀器&#xff…

RabbitMQ 消費冪等性與消息重放實現

一、冪等性實現 1.1 什么是冪等性&#xff1f; 冪等性是指同一條消息無論被消費多少次&#xff0c;業務結果都只生效一次&#xff0c;防止重復扣款、重復發貨等問題。 RabbitMQ 的投遞模式是“至少一次交付”(at-least-once delivery)&#xff0c;如果消費者處理失敗或者沒有及…

【HarmonyOS 5】鴻蒙TEE(可信執行環境)詳解

【HarmonyOS 5】鴻蒙TEE&#xff08;可信執行環境&#xff09;詳解 一、TEE是什么&#xff1f; 1、TEE的定義&#xff1a; 可信執行環境&#xff08;Trusted Execution Environment&#xff09;&#xff0c;簡稱TEE&#xff0c;是存在于智能手機、平板或任意移動設備主處理器…

算法: 冒泡排序

冒泡排序是一種簡單的排序算法&#xff0c;通過相鄰元素的比較和交換&#xff0c;使較大的元素逐漸"浮"到數組末尾。 時間復雜度:最佳 O(n) | 平均 O(n) | 最差 O(n) 空間復雜度:O(1) 穩定性:穩定 應用場景/前提條件 適用于小規模數據對幾乎已排序的數據效率較高…

基于SpringBoot的家電銷售展示平臺

源碼編號&#xff1a;S567 源碼名稱&#xff1a;基于SpringBoot的家電銷售展示平臺 用戶類型&#xff1a;雙角色&#xff0c;用戶、管理員 數據庫表數量&#xff1a;14 張表 主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven 運行環境&#xff1a;Windows/M…

java+vue+SpringBoo智慧旅游系統(程序+數據庫+報告+部署教程+答辯指導)

源代碼數據庫LW文檔&#xff08;1萬字以上&#xff09;開題報告答辯稿ppt部署教程代碼講解代碼時間修改工具 技術實現 開發語言&#xff1a;后端&#xff1a;Java 前端&#xff1a;vue框架&#xff1a;springboot數據庫&#xff1a;mysql 開發工具 JDK版本&#xff1a;JDK1.…

Docker 入門教程(三):鏡像操作命令

文章目錄 &#x1f433; Docker 入門教程&#xff08;三&#xff09;&#xff1a;鏡像操作命令獲取鏡像&#xff1a;docker pull查看鏡像&#xff1a;docker images刪除鏡像&#xff1a;docker rmi搜索鏡像&#xff1a;docker search鏡像打標簽&#xff1a;docker tag鏡像詳情與…

如何修改discuz文章標題字數限制 修改成255

在 Discuz! X3.5 中&#xff0c;文章&#xff08;主題&#xff09;標題字數的限制可以通過修改數據庫結構以及后臺配置來實現&#xff0c;以下是完整的修改方法&#xff0c;將標題長度限制改為 255 個字符&#xff1a; ? 一、修改數據庫字段長度 Discuz 默認標題字段是 subje…