1、MVC
简单地说,就是对文件夹的一个分类,职责的一个划分。
Model: 数据库操作
View: 模板文件
Controller: 业务逻辑的处理
将整个项目,划分成上述三部分,这样整个项目的结构看上去就非常清晰。
下面举一个非常简单的例子:
上面的图片就是例子项目的所有构成,s3.py文件是主程序,来看看s3.py干了什么,
from wsgiref.simple_server import make_server
from Controller import account
url_l = {
'/date': account.handle_date,
'/index': account.handle_index,
}
def runServer(environ, start_response):
# environ 客户端发来的所有数据
# start_response 封装要返回给用户的数据,相应头状态
start_response('200 OK', [('Content-Type', 'text/html')])
# current_url = environ['PATH_INFO']
# if current_url == "/index":
# return ['<h1>Hello, index!</h1>'.encode('utf-8')]
# elif current_url == "/date":
# return ['<h1>Hello, date!</h1>'.encode('utf-8')]
# else:
# return ['<h1>404</h1>'.encode('utf-8')]
current_url = None
current_url = environ['PATH_INFO'] # 获取url的后缀
if current_url in url_l:
func = url_l[current_url] # 根据后缀,调用不同的业务逻辑
if func:
return func()
else:
return ['<h1>404</h1>'.encode('utf-8')]
else:
return ['<h1>404</h1>'.encode('utf-8')]
if __name__ == "__main__":
httpd = make_server('', 8000, runServer)
print('Serving HTTP on port 8000...')
httpd.serve_forever()
s3.py是所有web socket服务端最基本最简单的实现方式,启动服务,监听客户端有没有请求。业务逻辑的实现通过导入Controller文件夹下的account.py文件,使得整个主函数看上去很简洁。下面来看看account干了什么,
import time
def handle_date():
v = str(time.time())
f = open("/home/xue/python_learn/day18/View/index.html", mode="rb")
data = f.read()
f.close()
data = data.replace(b'@uuuuu', v.encode('utf-8')) # 这里我们就可以去数据库里提取数据,进行操作
return [data, ]
def handle_index():
return ['<h1>Hello, index!</h1>'.encode('utf-8')]
account.py只有两个函数,分别处理网页客户端不同url后缀的请求,返回不同的网站,在这里还可以去调用数据库,这样就实现了一个最简单的MVC框架了。
2、MTV
和MVC类似,只不过文件夹的名字发生了变化。
Model: 数据库操作
Template: 模板文件
View: 业务处理