python3 web框架_循序渐进Python3(十二) --0-- web之框架
上述通過socket來實(shí)現(xiàn)了其本質(zhì),而對于真實(shí)開發(fā)中的python web程序來說,一般會分為兩部分:服務(wù)器程序和應(yīng)用程序。服務(wù)器程序負(fù)責(zé)對socket服務(wù)器進(jìn)行封裝,并在請求到來時,對請求的各種數(shù)據(jù)進(jìn)行整理。應(yīng)用程序則負(fù)責(zé)具體的邏輯處理。為了方便應(yīng)用程序的開發(fā),就出現(xiàn)了眾多的Web框架,例如:Django、Flask、web.py 等。不同的框架有不同的開發(fā)方式,但是無論如何,開發(fā)出的應(yīng)用程序都要和服務(wù)器程序配合,才能為用戶提供服務(wù)。這樣,服務(wù)器程序就需要為不同的框架提供不同的支持。這樣混亂的局面無論對于服務(wù)器還是框架,都是不好的。對服務(wù)器來說,需要支持各種不同框架,對框架來說,只有支持它的服務(wù)器才能被開發(fā)出的應(yīng)用使用。這時候,標(biāo)準(zhǔn)化就變得尤為重要。我們可以設(shè)立一個標(biāo)準(zhǔn),只要服務(wù)器程序支持這個標(biāo)準(zhǔn),框架也支持這個標(biāo)準(zhǔn),那么他們就可以配合使用。一旦標(biāo)準(zhǔn)確定,雙方各自實(shí)現(xiàn)。這樣,服務(wù)器可以支持更多支持標(biāo)準(zhǔn)的框架,框架也可以使用更多支持標(biāo)準(zhǔn)的服務(wù)器。
WSGI(Web Server Gateway Interface)是一種規(guī)范,它定義了使用python編寫的web app與web server之間接口格式,實(shí)現(xiàn)web app與web server間的解耦。
python標(biāo)準(zhǔn)庫提供的獨(dú)立WSGI服務(wù)器稱為wsgiref。
#!/usr/bin/env python
#coding:utf-8
fromwsgiref.simple_server importmake_server
defRunServer(environ,start_response):
start_response('200 OK',[('Content-Type','text/html')])
return'
Hello, web!
'if__name__ =='__main__':
httpd =make_server('',8000,RunServer)
print"Serving HTTP on port 8000..."
httpd.serve_forever()
自定義web框架
通過python標(biāo)準(zhǔn)庫提供的wsgiref模塊開發(fā)一個自己的Web框架。
#!/usr/bin/env python
#coding:utf-8
fromwsgiref.simple_server importmake_server
defindex():
return'index'
deflogin():
return'login'
defrouters():
urlpatterns =(
('/index/',index),
('/login/',login),
)
returnurlpatterns
defRunServer(environ,start_response):
start_response('200 OK',[('Content-Type','text/html')])
url =environ['PATH_INFO']
urlpatterns =routers()
func =None
foritem inurlpatterns:
ifitem[0]==url:
func =item[1]
break
iffunc:
returnfunc()
else:
return'404 not found'
if__name__ =='__main__':
httpd =make_server('',8000,RunServer)
print"Serving HTTP on port 8000..."
httpd.serve_forever()
python中的WEB框架分為:即寫Socket又寫(處理請求)的WEB框架比如Tornado,
還有就是不寫Socket然后自己寫處理請求的WEB框架:Django
總結(jié)
以上是生活随笔為你收集整理的python3 web框架_循序渐进Python3(十二) --0-- web之框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue项目导入elementui_在vu
- 下一篇: python读取两个csv文件后比较_p