所有的語言Web框架
本質(zhì)其實就是起一個socket
服務(wù)端,監(jiān)聽一個端口,然后運行起來
Web框架
包含兩部分,一部分是socket
,另外一部分是業(yè)務(wù)的邏輯處理,根據(jù)請求的不同做不同的處理
Python的Web框架
分成了兩類,
即包含socket也包含業(yè)務(wù)邏輯處理的(tornado)
不包含socket(框架本身通過第三方模塊實現(xiàn)socket)只包含業(yè)務(wù)邏輯處理(django,Flask)
WSGI
的全稱是Web Server Gateway Interface
,翻譯過來就是Web服務(wù)器網(wǎng)關(guān)接口。具體的來說,WSGI是一個規(guī)范,定義了Web服務(wù)器如何與Python應(yīng)用程序進行交互,使得使用Python寫的Web應(yīng)用程序可以和Web服務(wù)器對接起來。WSGI一開始是在PEP-0333中定義的,最新版本是在Python的PEP-3333定義的。
下面實例的代碼中RunServer()
函數(shù)就是符合WSGI標(biāo)準(zhǔn)的一個HTTP處理函數(shù),它接收兩個參數(shù):
environ
:一個包含所有HTTP請求信息的dict對象;
start_response
:一個發(fā)送HTTP響應(yīng)的函數(shù);
通過wsgiref
模塊實現(xiàn)一個自定義的web框架
代碼的大概邏輯就是: 定義了兩個函數(shù)index()
和manage()
,如果用戶訪問的URL是127.0.0.1:8000/index
就返回<h1>/index</h1>
,如果用戶訪問的是127.0.0.1:8000/manage
就返回/manage
,如果訪問其他頁面就返回404
#!/usr/bin/python2 # _*_coding:utf-8 _*_ from wsgiref.simple_server import make_server def index(arg): # 返回一個含有html代碼的字符串 return "<h1>%s</h1>" %(arg) def manage(arg): return arg URLS = { "/index": index, "/manage": manage, } def RunServer(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) url = environ['PATH_INFO'] if url in URLS.keys(): func_name = URLS[url] ret = func_name(url) else: ret = "404" return ret if __name__ == '__main__': httpd = make_server('', 8000, RunServer) httpd.serve_forever()
通過本機的curl命令去訪問測試
yangwen@yangwen:~$ curl 127.0.0.1:8000/index <h1>/index</h1>ansheng@Darker:~$ curl 127.0.0.1:8000/asdasd 404yangwen@yangwen:~$ curl 127.0.0.1:8000/manage /manage
無論多么復(fù)雜的Web應(yīng)用程序,入口都是一個WSGI
處理函數(shù)。HTTP請求的所有輸入信息都可以通過environ
獲得,HTTP響應(yīng)的輸出都可以通過start_response()
加上函數(shù)返回值作為Body,復(fù)雜的Web應(yīng)用程序,光靠一個WSGI函數(shù)來處理還是太底層了,我們需要在WSGI之上再抽象出Web框架,進一步簡化Web開發(fā)。
MVC模式就是架構(gòu)模式的一種,MVC模式的目的是實作一種動態(tài)的程式設(shè)計,使后續(xù)對程式的修改和擴充功能簡化,并且使程式某一部分的重復(fù)利用成為可能。除此之外,此模式通過對復(fù)雜度的簡化,使程式結(jié)構(gòu)更加直覺。
軟體系統(tǒng)通過對自身基本部分分離的同時也賦予了各個基本部分應(yīng)有的功能。專業(yè)人員可以通過自身的專長分組:
控制器Controller
- 負(fù)責(zé)轉(zhuǎn)發(fā)請求,對請求進行處理;
視圖View
- 介面設(shè)計人員進行圖形介面設(shè)計;
模型Model
- 程式設(shè)計師編寫程式應(yīng)有的功能(實作演算法等等)、資料庫專家進行資料管理和資料庫設(shè)計(可以實作具體的功能);
MVC中的M
是代表MODLE層
,V
代表VIEW
層,C代表Contrl
層. MTV中的M
是代表MODLE層
,T
代表Template(模板層)
,V
代表VIEW
層.
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: