国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳細解讀Python的web.py框架下的application.py模塊

2020-02-23 01:00:50
字體:
來源:轉載
供稿:網友

本文主要分析的是web.py庫的application.py這個模塊中的代碼??偟膩碚f,這個模塊主要實現了WSGI兼容的接口,以便應用程序能夠被WSGI應用服務器調用。WSGI是Web Server Gateway Interface的縮寫,具體細節可以查看WSGI的WIKI頁面
接口的使用
使用web.py自帶的HTTP Server

下面這個例子來自官方文檔的Hello World,這個代碼一般是應用入口的代碼:

import weburls = ("/.*", "hello")app = web.application(urls, globals())class hello:  def GET(self):    return 'Hello, world!'if __name__ == "__main__":  app.run()

上面的例子描述了一個web.py應用最基本的組成元素:

    URL路由表     一個web.application實例app     調用app.run()

其中,app.run()的調用是初始化各種WCGI接口,并啟動一個內置的HTTP服務器和這些接口對接,代碼如下:

def run(self, *middleware):  return wsgi.runwsgi(self.wsgifunc(*middleware))

與WSGI應用服務器對接

如果你的應用要與WSGI應用服務器對接,比如uWSGI,gunicorn等,那么應用入口的代碼就要換一種寫法了:

import webclass hello:  def GET(self):    return 'Hello, world!'urls = ("/.*", "hello")app = web.application(urls, globals())application = app.wsgifunc()

在這種場景下,應用的代碼不需要啟動HTTP服務器,而是實現一個WSGI兼容的接口供WSGI服務器調用。web.py框架為我們實現了這樣的接口,你只需要調用application = app.wsgifunc()就可以了,這里所得到的application變量就是WSGI接口(后面分析完代碼你就會知道了)。
WSGI接口的實現分析

分析主要圍繞著下面兩行代碼進行:

app = web.application(urls, globals())application = app.wsgifunc()

web.application實例化

初始化這個實例需要傳遞兩個參數:URL路由元組和globals()的結果。

另外,還可以傳遞第三個變量:autoreload,用來指定是否需要自動重新導入Python模塊,這在調試的時候很有用,不過我們分析主要過程的時候可以忽略。

application類的初始化代碼如下:

class application:  def __init__(self, mapping=(), fvars={}, autoreload=None):    if autoreload is None:      autoreload = web.config.get('debug', False)    self.init_mapping(mapping)    self.fvars = fvars    self.processors = []    self.add_processor(loadhook(self._load))    self.add_processor(unloadhook(self._unload))    if autoreload:      ...

其中,autoreload相關功能的代碼略去了。其他的代碼主要作了如下幾個事情:

    self.init_mapping(mapping):初始化URL路由映射關系。     self.add_processor():添加了兩個處理器。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绍兴县| 徐州市| 湟中县| 黄平县| 寿光市| 濉溪县| 二连浩特市| 昌江| 江油市| 邓州市| 丹凤县| 临清市| 昌宁县| 门源| 龙胜| 桃园县| 新沂市| 黄大仙区| SHOW| 宣汉县| 伊金霍洛旗| 高安市| 桐城市| 夏邑县| 万全县| 北碚区| 特克斯县| 大宁县| 翁牛特旗| 星子县| 潼关县| 德惠市| 武安市| 西盟| 盘锦市| 始兴县| 忻州市| 汨罗市| 清涧县| 肃北| 敦煌市|