python mvc web_浅谈python_web的MVC和MTV

本文介绍了Python Web开发中的MVC(Model-View-Controller)和MTV(Model-Template-View)模式,通过示例代码演示了Python Web服务器的基本流程,并逐步引入了MVC思想,帮助理解Python Web应用的结构和数据走向。
摘要由CSDN通过智能技术生成

一、作者感悟

之前学了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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值