所有的語言Web框架
本質(zhì)其實(shí)就是起一個(gè)socket
服務(wù)端,監(jiān)聽一個(gè)端口,然后運(yùn)行起來
Web框架
包含兩部分,一部分是socket
,另外一部分是業(yè)務(wù)的邏輯處理,根據(jù)請(qǐng)求的不同做不同的處理
Python的Web框架
分成了兩類,
即包含socket也包含業(yè)務(wù)邏輯處理的(tornado)
不包含socket(框架本身通過第三方模塊實(shí)現(xiàn)socket)只包含業(yè)務(wù)邏輯處理(django,Flask)
WSGI
的全稱是Web Server Gateway Interface
,翻譯過來就是Web服務(wù)器網(wǎng)關(guān)接口。具體的來說,WSGI是一個(gè)規(guī)范,定義了Web服務(wù)器如何與Python應(yīng)用程序進(jìn)行交互,使得使用Python寫的Web應(yīng)用程序可以和Web服務(wù)器對(duì)接起來。WSGI一開始是在PEP-0333中定義的,最新版本是在Python的PEP-3333定義的。
下面實(shí)例的代碼中RunServer()
函數(shù)就是符合WSGI標(biāo)準(zhǔn)的一個(gè)HTTP處理函數(shù),它接收兩個(gè)參數(shù):
environ
:一個(gè)包含所有HTTP請(qǐng)求信息的dict對(duì)象;
start_response
:一個(gè)發(fā)送HTTP響應(yīng)的函數(shù);
通過wsgiref
模塊實(shí)現(xiàn)一個(gè)自定義的web框架
代碼的大概邏輯就是: 定義了兩個(gè)函數(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): # 返回一個(gè)含有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()
通過本機(jī)的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)用程序,入口都是一個(gè)WSGI
處理函數(shù)。HTTP請(qǐng)求的所有輸入信息都可以通過environ
獲得,HTTP響應(yīng)的輸出都可以通過start_response()
加上函數(shù)返回值作為Body,復(fù)雜的Web應(yīng)用程序,光靠一個(gè)WSGI函數(shù)來處理還是太底層了,我們需要在WSGI之上再抽象出Web框架,進(jìn)一步簡化Web開發(fā)。
MVC模式就是架構(gòu)模式的一種,MVC模式的目的是實(shí)作一種動(dòng)態(tài)的程式設(shè)計(jì),使后續(xù)對(duì)程式的修改和擴(kuò)充功能簡化,并且使程式某一部分的重復(fù)利用成為可能。除此之外,此模式通過對(duì)復(fù)雜度的簡化,使程式結(jié)構(gòu)更加直覺。
軟體系統(tǒng)通過對(duì)自身基本部分分離的同時(shí)也賦予了各個(gè)基本部分應(yīng)有的功能。專業(yè)人員可以通過自身的專長分組:
控制器Controller
- 負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求,對(duì)請(qǐng)求進(jìn)行處理;
視圖View
- 介面設(shè)計(jì)人員進(jìn)行圖形介面設(shè)計(jì);
模型Model
- 程式設(shè)計(jì)師編寫程式應(yīng)有的功能(實(shí)作演算法等等)、資料庫專家進(jìn)行資料管理和資料庫設(shè)計(jì)(可以實(shí)作具體的功能);
MVC中的M
是代表MODLE層
,V
代表VIEW
層,C代表Contrl
層. MTV中的M
是代表MODLE層
,T
代表Template(模板層)
,V
代表VIEW
層.
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: