webpy原始碼閱讀 開篇

2021-06-18 18:54:39 字數 4068 閱讀 2418

我剛開始學習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):

return wsgi.runwsgi(self.wsgifunc(*middleware))

好吧它又調轉到了wsgi.py的runwsgi()函式了其**為(該**可以基本飄過只看最後一行)

看到這段**我就豁然開朗了原理8080埠預設是在這裡啊!

再看下面的**

func = staticmiddleware(func)

func = logmiddleware(func)

它們分別是加入了兩個路由第乙個是我們靜態資源資料夾路由"/static/",另外乙個是日誌路由(所謂路由可以理解為乙個***,路由攔截自定url路徑的資料)不明白的話還是看**比較清楚 以staticmiddleware為例他們都在httpservice.py檔案中

class staticmiddleware:

"""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:

#如果不是就交由下乙個路由處理

讀到這裡你可能會有點不明白了  def __call__(self, environ, start_response):這傳入的兩個引數  environ, start_response是怎麼來的?有什麼意義?

其實這是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可以顯示出類的繼承和實現結構,包括它的父類和...