Python全棧之路系列之Web框架介紹
所有的語言Web框架
本質其實就是起一個socket
服務端,監聽一個端口,然后運行起來
Web框架
包含兩部分,一部分是socket
,另外一部分是業務的邏輯處理,根據請求的不同做不同的處理
Python的Web框架
分成了兩類,
-
即包含socket也包含業務邏輯處理的(tornado)
-
不包含socket(框架本身通過第三方模塊實現socket)只包含業務邏輯處理(django,Flask)
WSGI
的全稱是Web Server Gateway Interface
,翻譯過來就是Web服務器網關接口。具體的來說,WSGI是一個規范,定義了Web服務器如何與Python應用程序進行交互,使得使用Python寫的Web應用程序可以和Web服務器對接起來。WSGI一開始是在PEP-0333中定義的,最新版本是在Python的PEP-3333定義的。
下面實例的代碼中RunServer()
函數就是符合WSGI標準的一個HTTP處理函數,它接收兩個參數:
-
environ
:一個包含所有HTTP請求信息的dict對象; -
start_response
:一個發送HTTP響應的函數;
通過wsgiref
模塊實現一個自定義的web框架
代碼的大概邏輯就是: 定義了兩個函數index()
和manage()
,如果用戶訪問的URL是127.0.0.1:8000/index
就返回<h1>/index</h1>
,如果用戶訪問的是127.0.0.1:8000/manage
就返回/manage
,如果訪問其他頁面就返回404
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #!/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命令去訪問測試
1 2 3 4 5 6 | ansheng@Darker:~$?curl? 127.0 . 0.1 : 8000 / index <h1> / index< / h1> ansheng@Darker:~$?curl? 127.0 . 0.1 : 8000 / asdasd 404 ansheng@Darker:~$?curl? 127.0 . 0.1 : 8000 / manage / manage |
無論多么復雜的Web應用程序,入口都是一個WSGI
處理函數。HTTP請求的所有輸入信息都可以通過environ
獲得,HTTP響應的輸出都可以通過start_response()
加上函數返回值作為Body,復雜的Web應用程序,光靠一個WSGI函數來處理還是太底層了,我們需要在WSGI之上再抽象出Web框架,進一步簡化Web開發。
MVC and MTV
MVC模式就是架構模式的一種,MVC模式的目的是實作一種動態的程式設計,使后續對程式的修改和擴充功能簡化,并且使程式某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程式結構更加直覺。
軟體系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。專業人員可以通過自身的專長分組:
-
控制器Controller
?- 負責轉發請求,對請求進行處理; -
視圖View
?- 介面設計人員進行圖形介面設計; -
模型Model
?- 程式設計師編寫程式應有的功能(實作演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實作具體的功能);
MVC中的M
是代表MODLE層
,V
代表VIEW
層,C代表Contrl
層.
MTV中的M
是代表MODLE層
,T
代表Template(模板層)
,V
代表VIEW
層.