我剛開始學習webpy的時候根據官網文件能完成大部分功能,但用著用著還是感覺有些不太爽感覺自己使用不靈活,有些功能想實現不知道該怎樣入手,而現在網上關於深入使用webpy的開發資料也很少。所以決定還是自己來看看原始碼吧,很慶幸webpy原始碼不多(應該是很少)看兩個小時就能理清楚了。
1 首先看看webpy的原始碼目錄結構
2 找到原始碼分析的切入點, 以下是webpy官網提供的helloworld程式**
import web
urls = ("/.*", "hello")
class hello:
def get(self):
return 'hello, world!'
if __name__ == "__main__":
def run(self, *middleware):好吧它又調轉到了wsgi.py的runwsgi()函式了其**為(該**可以基本飄過只看最後一行)return wsgi.runwsgi(self.wsgifunc(*middleware))
看到這段**我就豁然開朗了原理8080埠預設是在這裡啊!
再看下面的**
func = staticmiddleware(func)
func = logmiddleware(func)
它們分別是加入了兩個路由第乙個是我們靜態資源資料夾路由"/static/",另外乙個是日誌路由(所謂路由可以理解為乙個***,路由攔截自定url路徑的資料)不明白的話還是看**比較清楚 以staticmiddleware為例他們都在httpservice.py檔案中
class staticmiddleware:讀到這裡你可能會有點不明白了 def __call__(self, environ, start_response):這傳入的兩個引數 environ, start_response是怎麼來的?有什麼意義?"""wsgi middleware for serving static files."""
#儲存下乙個路由
#儲存自己將要攔截的路徑
self.prefix = prefix
def __call__(self, environ, start_response):
#當使用者請求是wsgi將依次呼叫路由器的這個函式
path = environ.get('path_info', '')
path = self.normpath(path)
#判斷一下如果是我要攔截的路徑"/static/"
if path.startswith(self.prefix):
else:
#如果不是就交由下乙個路由處理
其實這是python的wsgi協議裡面定義的東東了你可以通過這篇文章了解wsgi的部分知識
如果你看明白了wsgi的知識也就自然明白了run******()函式中server.start()是個什麼了,它其實就是啟動wsgiserver服務
'''有圖有真相created on 2013-10-15
@author: liangqianwu
'''#_*_ coding:utf-8_*_
import web
urls = ("/.*", "hello")
class hello:
def get(self):
return 'hello, world!'
def my(environ, start_response):
status = '200 ok'
output = 'this is my middleware!'
response_headers = [('content-type', 'text/plain')]
write = start_response(status, response_headers)
write('hello ')
return [output]
class mymiddleware:
"""wsgi middleware for serving static files."""
self.prefix = prefix
def __call__(self, environ, start_response):
path = environ.get('path_info', '')
if path.startswith(self.prefix):
return my(environ, start_response)
else:
if __name__ == "__main__":
webpy原始碼閱讀 1 初見整體
最近閒來無事,準備看看web.py的原始碼,一開始直接看現在的原始碼,發現比較吃力,後來想起從github上clone下來後checkout到2006年的那個第乙個版本開始,700多次commit,準備一次次的看,記錄下自己的閱讀所得 最開始版本的web.py就乙個web.py檔案,一共1000行多...
Vue 原始碼閱讀1之開篇感悟
隨著網際網路的大風越刮越大,前端的發展也是十分的迅猛,出現了各種各樣的前端框架,vue是其中的佼佼者,這一系列的文章我將以初學者的身份分析vue的相關實現,希望能夠和大家一起進步,早日實現高薪。我個人感覺要要學習vue的原始碼,vue的生命週期是離不開的話題,每個人都知道vue的生命週期為befor...
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...