web.py 是一個(gè)輕量級(jí)、簡(jiǎn)潔的 Python Web 框架,由 Aaron Swartz 開(kāi)發(fā)。它以簡(jiǎn)單直接的設(shè)計(jì)哲學(xué)著稱,適合快速構(gòu)建小型 Web 應(yīng)用和 API接口實(shí)現(xiàn)。
核心特點(diǎn): 1. 極簡(jiǎn)設(shè)計(jì) :代碼量少,核心文件僅一個(gè) web
模塊 2. 零配置 :開(kāi)箱即用,無(wú)需復(fù)雜配置 3. URL 路由 :靈活的 URL 映射機(jī)制 4. 模板引擎 :內(nèi)置簡(jiǎn)單模板系統(tǒng) 5. 數(shù)據(jù)庫(kù)支持 :內(nèi)置數(shù)據(jù)庫(kù)訪問(wèn)工具 6. HTTP 工具 :完善的請(qǐng)求/響應(yīng)處理 安裝 web.py 通過(guò) pip 安裝:
pip install web . py
注意 :Python 3 請(qǐng)使用 pip install web.py==0.62
(0.62+ 版本支持 Python 3)
基礎(chǔ)配置 創(chuàng)建基礎(chǔ)應(yīng)用結(jié)構(gòu):
myapp / ├── app . py # 主程序 ├── templates / # 模板目錄 │ └── index . html └── static / # 靜態(tài)文件 └── style . css
使用示例 示例 1:基礎(chǔ) Web 應(yīng)用 # app.py import web # URL 路由配置 urls = ( '/' , 'Index' , '/hello/(.*)' , 'Hello' ) app = web . application ( urls , globals ()) class Index : def GET ( self ): return "Welcome to web.py!" class Hello : def GET ( self , name ): return f "Hello, {name} !" if __name__ == "__main__" : app . run () 運(yùn)行應(yīng)用:
python app . py
訪問(wèn):
? http://localhost:8080/hello/Leo
示例 2:使用模板引擎 <!-- templates/index.html --> < html > < head > < title > web.py Demo </ title > </ head > < body > < h1 > $title </ h1 > < ul > $for item in items: < li > $item </ li > </ ul > </ body > </ html >
# app.py (添加新路由) urls = ( '/' , 'Index' , '/list' , 'List' ) render = web . template . render ( 'templates/' ) class List : def GET ( self ): data = { "title" : "Shopping List" , "items" : [ "Apples" , "Bananas" , "Coffee" ] } return render . index (** data ) 示例 3:表單處理 # 添加表單路由 urls = ( '/form' , 'FormHandler' ) class FormHandler : def GET ( self ): return '''<form method="post"> <input type="text" name="name"> <button>Submit</button> </form>''' def POST ( self ): data = web . input () return f "Received: {data.name} "
示例 4:數(shù)據(jù)庫(kù)操作(SQLite) # 添加表單路由 urls = ( '/form' , 'FormHandler' ) class FormHandler : def GET ( self ): return '''<form method="post"> <input type="text" name="name"> <button>Submit</button> </form>''' def POST ( self ): data = web . input () return f "Received: {data.name} " 關(guān)鍵組件詳解 1. URL 路由系統(tǒng) : urls = ( '/path' , 'ClassName' , '/(.*)' , 'CatchAll' # 正則匹配 )
2. 請(qǐng)求處理 : class MyHandler : def GET ( self ): # 獲取查詢參數(shù) input_data = web . input ( id = None ) def POST ( self ): # 獲取表單數(shù)據(jù) form_data = web . input ()
3. 模板使用 : render = web . template . render ( 'templates/' ) return render . my_template ( name = "John" , age = 30 )
4. HTTP 工具 : # 重定向 raise web . seeother ( '/new-url' ) # 設(shè)置 Cookie web . setcookie ( "user" , "john" )
部署生產(chǎn)環(huán)境 使用內(nèi)置 WSGI 服務(wù)器部署:
# app.py 底部添加 application = app . wsgifunc ()
然后用 uWSGI/Gunicorn 運(yùn)行:
gunicorn app : application
適用場(chǎng)景 ? 教學(xué)/學(xué)習(xí) Web 開(kāi)發(fā) 注意 :對(duì)于大型復(fù)雜項(xiàng)目,建議使用 Django 或 Flask 等更全功能的框架。
最近在看官方微信公眾號(hào)開(kāi)發(fā)指南和chatgpt-on-wechat都是基于web.py進(jìn)行簡(jiǎn)單示例講解和開(kāi)發(fā)的,所以很有必要學(xué)習(xí)和記錄一下web.py模塊。 web.py 以其極簡(jiǎn)哲學(xué)著稱,核心代碼僅數(shù)千行,但提供了完整的 Web 開(kāi)發(fā)基礎(chǔ)功能,是理解 Web 框架設(shè)計(jì)的優(yōu)秀學(xué)習(xí)資源。
該文章在 2025/7/15 10:30:28 編輯過(guò)