首页 > 代码库 > web框架以及MVC、MTV
web框架以及MVC、MTV
<style>h3 { background-color: palegreen }</style>
View Code
View Code
View Code
View Code
View Code
本篇内容概要
----原始web框架 ----自定义web框架 ----mvc和mtv
一、web框架的本质
对于所有的web应用,本质上其实就是一个socket服务端,用户的浏览器就是一个socket客户端
简单的说就是,socket传入数据,之后后面是业务逻辑处理程序
画得不好,理解就好
二、引入WSGI
由于web框架包括两部分 1、socket 2、逻辑处理 有些框架只有逻辑处理,没有socket,如flask、bottle、Django 有些框架两部分都有,如tornado 那些没有socket的,需要去自己写或者引入第三方socket,由于没有固定的标准,所以比较混乱,这个时候WSGI就隆重登场了,
中文翻译 web服务网关接口
WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,
实现web app与web server间的解耦。
python标准库提供的独立WSGI服务器称为wsgiref。当还有其他的接口格式:
‘cgi‘: CGIServer, ‘flup‘: FlupFCGIServer, ‘wsgiref‘: WSGIRefServer, ‘waitress‘: WaitressServer, ‘cherrypy‘: CherryPyServer, ‘paste‘: PasteServer, ‘fapws3‘: FapwsServer, ‘tornado‘: TornadoServer, ‘gae‘: AppEngineServer, ‘twisted‘: TwistedServer, ‘diesel‘: DieselServer, ‘meinheld‘: MeinheldServer, ‘gunicorn‘: GunicornServer, ‘eventlet‘: EventletServer, ‘gevent‘: GeventServer, ‘geventSocketIO‘:GeventSocketIOServer, ‘rocket‘: RocketServer, ‘bjoern‘ : BjoernServer, ‘auto‘: AutoServer,
Django实现的wsgiref:
#!/usr/bin/env python #coding:utf-8 from wsgiref.simple_server import make_server def RunServer(environ, start_response): start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)]) return ‘<h1>Hello world!</h1>‘ if __name__ == ‘__main__‘: httpd = make_server(‘‘, 8000, RunServer) print "Serving HTTP on port 8000..." httpd.serve_forever()
上面模板引擎的参数
第一个参数environ代表封装的用户的所有的请求
第二个参数 start_response 代表返回的数据
三、自定义web框架
目录结构如下:,view文件包里面是HTML文件
controllar文件为
#/usr/bin/env python #-*- coding:utf-8 -*- import os def new(): f=open(os.path.join("Views","s1.html"),"r") data=f.read() f.close() return data def index(): f=open(os.path.join("Views","index.html"),"r") data=f.read() f.close() return data
start文件为:
#/bin/usr/env python #-*- coding:utf-8 -*- from wsgiref.simple_server import make_server # from urls import URLS import controllar def RunServer(environ,start_response): start_response(‘200 OK‘,[(‘Content-Type‘,‘text/html‘)]) url=environ[‘PATH_INFO‘] if url== "/new": ret=controllar.new() elif url=="/index": ret=controllar.index() else: ret="404" return ret # if url in URLS.keys(): # func_name=URLS[url] # ret=func_name() # else: # ret=404 # return ret if __name__== "__main__": httpd=make_server("",81,RunServer) httpd.serve_forever()
上面的文件分别对应上图中的,HTML和和函数,以及socket
但是上面的代码只能返回给用户HTML的内容,但是没法返回动态内容,如何解决?后文分解
四、MVC模式:
所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起:
M.模型负责业务对象与数据库的映射(ORM) (数据库相关操作)
V.视图负责与用户的交互(页面) (模板HTML文件)
C.控制器接受用户的输入调用模型和视图完成用户的请求 (业务逻辑)
五、MTV模式
Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同
Django的MTV分别是值:
- M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)。
- T 代表模板 (Template):负责如何把页面展示给用户(html)。
- V 代表视图(View):负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
- Web服务器(中间件)收到一个http请求
- Django在URLconf里查找对应的视图(View)函数来处理http请求
- 视图函数调用相应的数据模型来存取数据、调用相应的模板向用户展示页面
- 视图函数处理结束后返回一个http的响应给Web服务器
- Web服务器将响应发送给客户端
这种设计模式关键的优势在于各种组件都是松耦合的。这样,每个由 Django驱动的Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。
比如,开发者更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。设计师可以改变 HTML页面的样式而不用接触Python代码。
数据库管理员可以重新命名数据表并且只需更改模型,无需从一大堆文件中进行查找和替换。
比如,开发者更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。设计师可以改变 HTML页面的样式而不用接触Python代码。
数据库管理员可以重新命名数据表并且只需更改模型,无需从一大堆文件中进行查找和替换。
Django的MTV模式相对应的python文件如下:
如果不考虑内部原理一句话总结MVC和MTV :MTV ---MTV框架就是文件夹的归宿
总结:
1、 插件 2、 web框架 web框架的本质都是socket,通过字符串发送内容 发送字符串: 第一块:协议和方式 第二块:请求头 第三块:发送内容hello 响应字符串: 第一块:协议和状态 200 第二块:响应头 第三块:响应内容“hello” python web框架分类: 自给自足:socket ==》Tornado 第三方:WSGI+框架 MVC.MTV 文件夹的归类
web框架以及MVC、MTV
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。