web服務器和web客戶端之間的網絡通信,本質上是 socket的通信, 服務器端運行的是socketServer 客戶端運行的是socketClient.
對於python web程序來說,一般來說會分爲兩部分,服務器程序\應用程序, (jsp好像也是這樣的,讓我想起了java的war包,不是太瞭解,只知道這些war包可以組成jsp上的應用).
服務器程序:負責對socket服務器進行封裝,在請求到來的時候,對請求進行整理,
應用程序 : 負責具體的業務邏輯處理,
爲了方便應用程序的開發,出現了很多web框架, python的web框架有 django flask web.py tornado等等
不同的框架的開發方式不盡相同, 但都需要 應用程序和服務器程序配合使用, 併爲用戶提供服務.
但是服務器要爲不同的框架提供支持,如果沒有一個統一的標準, 那麼局面會很混亂,無論對服務器還是對於框架 都是不好的, 關鍵是開發會很累. 所以標準很重要,
按照一個統一的標準進行開發, 如果服務器程序 和 應用程序都支持這個統一的標準, 那麼兩者就可以配合使用,一旦標準確定, 雙方各自實現,(就好像螺絲釘 和螺帽 )
這樣服務器可以支持更多支持該標準的框架 ,框架也可以使用更多 支持標準的服務器 (互利互惠)
WSGI(Web Server Gateway Interface) 是Web服務器與Web應用程序或應用框架之間的一種低級別的接口,可以提升可移植Web應用開發的共同點.
WSGI就像是一座橋樑,一邊連着web服務器,另一邊連着用戶的應用。但是呢,這個橋的功能很弱,有時候還需要別的橋來幫忙才能進行處理。
SERVER <---> wsgi <---> APP
我們可以先寫一個簡單的框架:
struct.py
#!/usr/bin/env python #coding:utf-8 from wsgiref.simple_server import make_server def index(): return 'index' def login(): return 'login' urlpatterns = [ ('/index/',index), ('/login/',login), ] def RunServer(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) url = environ['PATH_INFO'] func = None for item in urlpatterns: if item[0] == url: func = item[1] break if func: return func() else: return '404 not found' if __name__ == '__main__': httpd = make_server('', 8000, RunServer) print "Serving HTTP on port 8000..." httpd.serve_forever()
模板引擎:
參考jinja2 http://timesnotes.blog.51cto.com/1079212/1748411
在使用web框架的時候,我們需要注意兩個名字 MVC MTV(不是music TV)
MVC : 指的是 模型-視圖-控制器 模式
# models views controllers
# 數據庫處理 html模板 處理請求(函數)
MTV : 指的是 模型-模板-視圖 模式
# models templates views
# 數據庫處理 html模板 處理請求(函數)