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