WEBAPP开发之web框架以及MVC、MTV
白羽 2019-01-23 来源 :网络 阅读 1077 评论 0

摘要:本文将带你了解WEBAPP开发web框架以及MVC、MTV,希望本文对大家学WEBAPP有所帮助。

    本文将带你了解WEBAPP开发web框架以及MVC、MTV,希望本文对大家学WEBAPP有所帮助。



一、web框架的本质

 对于所有的web应用,本质上其实就是一个socket服务端,用户的浏览器就是一个socket客户端

简单的说就是,socket传入数据,之后后面是业务逻辑处理程序

画得不好,理解就好

二、引入WSGI

 

由于web框架包括两部分1、socket2、逻辑处理有些框架只有逻辑处理,没有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,

View   Code

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()

View Code

上面模板引擎的参数

第一个参数environ代表封装的用户的所有的请求

第二个参数   start_response   代表返回的数据

三、自定义web框架

 目录结构如下:,view文件包里面是HTML文件

controllar文件为

#/usr/bin/env python#-*- coding:utf-8 -*-import osdef new():      f=open(os.path.join("Views","s1.html"),"r")      data=f.read()      f.close()      return   datadef index():      f=open(os.path.join("Views","index.html"),"r")      data=f.read()      f.close()      return data

View   Code

start文件为:

#/bin/usr/env python#-*- coding:utf-8 -*-from wsgiref.simple_server import   make_server# from urls import URLSimport  controllardef   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 retif __name__== "__main__":      httpd=make_server("",81,RunServer)      httpd.serve_forever()

View   Code

上面的文件分别对应上图中的,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代码。
数据库管理员可以重新命名数据表并且只需更改模型,无需从一大堆文件中进行查找和替换。

 

Django的MTV模式相对应的python文件如下:

 

如果不考虑内部原理一句话总结MVC和MTV   :MTV   ---MTV框架就是文件夹的归宿

 总结:

1、      插件2、      web框架web框架的本质都是socket,通过字符串发送内容发送字符串:    第一块:协议和方式    第二块:请求头      第三块:发送内容hello响应字符串:    第一块:协议和状态   200    第二块:响应头        第三块:响应内容“hello”python   web框架分类:      自给自足:socket             ==》Tornado    第三方:WSGI+框架MVC.MTV          文件夹的归类

View   Code

 


                                 

                                 

                                     

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之WebApp频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程