python mvc web_浅谈python_web的MVC和MTV
一、作者感悟
之前學(xué)了java,可以簡(jiǎn)單的用ssm框架寫點(diǎn)網(wǎng)頁(yè),后來(lái)入黑盒測(cè)試,自學(xué)了python,但說(shuō)實(shí)話我更比較喜歡java那種規(guī)規(guī)矩矩,現(xiàn)在只是自己 寫個(gè)腳本爬蟲更多的會(huì)用python靈活
二、什么是MVC、MTV
python 的MVC和java的一樣,分別是Model、View、Controller,也就是我們通常說(shuō)的模型(model)-視圖(view)-控制器(controller),分別對(duì)應(yīng)著數(shù)據(jù)庫(kù)、模板文件、業(yè)務(wù)處理。
MTV 分別是 Model、Template、View,分別對(duì)應(yīng)的是數(shù)據(jù)庫(kù)、模板文件、業(yè)務(wù)處理,python Django,用的就是MTV模式
三、初識(shí)python 的web流程
要知道代碼的邏輯關(guān)系,和數(shù)據(jù)走向,這是我當(dāng)時(shí)學(xué)java ssm框架時(shí)候心得,python 自學(xué)也從這句話開始.
WSGI(Web Server Gateway Interface),python標(biāo)準(zhǔn)庫(kù)提供的獨(dú)立WSGI服務(wù)器稱為wsgiref。
from wsgiref.simple_server import make_server
def RunServer(environ, start_response):
#environ 客戶發(fā)來(lái)的所有信息 environ['PATH_INFO']獲取地址
#start_response 返回響應(yīng)信息
start_response('200 OK',[('Content-Type', 'text/html')])
return ['
Python
'.encode('utf-8')]
if __name__ == '__main__':
httpd = make_server('',8000,RunServer)
httpd.serve_forever()
訪問(wèn)http://127.0.0.1:8000/,就能看到頁(yè)面python
下一步要做的就是,有多個(gè)頁(yè)面對(duì)應(yīng)多個(gè)響應(yīng)信息,environ是個(gè)字典,里面就有從客戶端返回的地址信息environ['PATH_INFO']
from wsgiref.simple_server import make_server
def RunServer(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
current_url = environ['PATH_INFO']
#http://127.0.0.1:8000/index
if current_url == '/index':
return ['
welcome
'.encode('utf-8')]#http://127.0.0.1:8000/data
elif current_url == '/data':
return ['
DATa
'.encode('utf-8')]#必須寫,因?yàn)榭蛻舳藭?huì)給服務(wù)器端發(fā)送/favicon.ico 也就是ico圖片
else:
return ['
404
'.encode('utf-8')]if __name__ == '__main__':
httpd = make_server('',8000,RunServer)
httpd.serve_forever()
else 是必須寫的因?yàn)榭蛻舳藭?huì)返回/favicon.ico 這樣我們的代碼可以對(duì)他做判斷,上面的代碼其實(shí)我們可以吧 /index 和/data 寫成函數(shù)如下:
from wsgiref.simple_server import make_server
#/data
def handle_data():
return ['
DATa
'.encode('utf-8')]#/index
def handle_index():
return ['
welcome
'.encode('utf-8')]def RunServer(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
current_url = environ['PATH_INFO']
#http://127.0.0.1:8000/index
if current_url == '/index':
return handle_data()
#http://127.0.0.1:8000/data
elif current_url == '/data':
#必須寫,因?yàn)榭蛻舳藭?huì)給服務(wù)器端發(fā)送/favicon.ico 也就是ico圖片
return handle_index()
else:
return ['
404
'.encode('utf-8')]if __name__ == '__main__':
httpd = make_server('',8000,RunServer)
httpd.serve_forever()
要是 20個(gè)網(wǎng)頁(yè)我們就給寫20個(gè)if判斷么,這時(shí)候我們就可以用字典來(lái)解決這個(gè)問(wèn)題
from wsgiref.simple_server import make_server
def handler_index():
return ['index'.encode('utf-8')]
def handler_data():
return ['data'.encode('utf-8')]
#用字典封裝方法
URL_DICT = {
'/data' : handler_data,
'/index' : handler_index,
}
def RunServer(environ, start_response):
#environ 客戶端返回
#start_response 服務(wù)器端響應(yīng)給用戶
start_response('200 OK',[('Concent-Type', 'text/html')])
current_url = environ['PATH_INFO']
fun = None
#先用變量接收
if current_url in URL_DICT:
fun = URL_DICT[current_url]
if fun:
return fun()
else:
return ['404'.encode('utf-8')]
if __name__ == '__main__':
httpd = make_server('',8000,RunServer)
httpd.serve_forever()
我的網(wǎng)頁(yè)要是有很多內(nèi)容怎么辦,總不能在return 全拼出來(lái)吧,這時(shí)候就是MVC登場(chǎng)了
image.png
首先我們創(chuàng)建一個(gè)文件夾叫Controller,這里面是處理層,我們把剛才的寫的響應(yīng)給用戶展示的方法放在account.py 文件
#用io 讀的方法,去讀取放在VIEW層的頁(yè)面
def handler_index():
with open('/views/index','rb') as f:
data = f.read()
#替換html內(nèi)容 data.replace()
f.close()
return [data,]
def handler_data():
return ['data'.encode('utf-8')]
我們創(chuàng)建一個(gè)VIEWS層,里面用來(lái)存放我們的html
我們?cè)趯懸粋€(gè)入口
from wsgiref.simple_server import make_server
#卻controller 讀取我們的 方法
from Controller import account
#用字典封裝方法
URL_DICT = {
'/data' : account.handler_data,
'/index' : account.handler_index,
}
def RunServer(environ, start_response):
#environ 客戶端返回
#start_response 服務(wù)器端響應(yīng)給用戶
start_response('200 OK',[('Concent-Type', 'text/html')])
current_url = environ['PATH_INFO']
fun = None
#先用變量接收
if current_url in URL_DICT:
fun = URL_DICT[current_url]
if fun:
return fun()
else:
return ['404'.encode('utf-8')]
if __name__ == '__main__':
httpd = make_server('',8000,RunServer)
httpd.serve_forever()
總結(jié)
以上是生活随笔為你收集整理的python mvc web_浅谈python_web的MVC和MTV的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 云起智慧中心连接华为_云起LifeSma
- 下一篇: 如何查看python解释器位置_Pyth