设为首页 收藏本站
查看: 757|回复: 0

[经验分享] Python之Web框架介绍

[复制链接]

尚未签到

发表于 2018-8-12 13:09:10 | 显示全部楼层 |阅读模式
  所有的语言Web框架本质其实就是起一个socket服务端,监听一个端口,然后运行起来
  Web框架包含两部分,一部分是socket,另外一部分是业务的逻辑处理,根据请求的不同做不同的处理
  Python的Web框架分成了两类,

  •   即包含socket也包含业务逻辑处理的(tornado)
  •   不包含socket(框架本身通过第三方模块实现socket)只包含业务逻辑处理(django,Flask)
  WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。WSGI一开始是在PEP-0333中定义的,最新版本是在Python的PEP-3333定义的。

  下面实例的代码中RunServer()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:

  •   environ:一个包含所有HTTP请求信息的dict对象;
  •   start_response:一个发送HTTP响应的函数;
  通过wsgiref模块实现一个自定义的web框架
  代码的大概逻辑就是: 定义了两个函数index()和manage(),如果用户访问的URL是127.0.0.1:8000/index就返回<h1>/index</h1>,如果用户访问的是127.0.0.1:8000/manage就返回/manage,如果访问其他页面就返回404
#!/usr/bin/python2  
# _*_coding:utf-8 _*_
  
from wsgiref.simple_server import make_server
  

  
def index(arg):
  
    # 返回一个含有html代码的字符串
  
    return "<h1>%s</h1>" %(arg)
  

  
def manage(arg):
  
    return arg
  

  
URLS = {
  
    "/index": index,
  
    "/manage": manage,
  
}
  

  
def RunServer(environ, start_response):
  
    start_response('200 OK', [('Content-Type', 'text/html')])
  
    url = environ['PATH_INFO']
  
    if url in URLS.keys():
  
        func_name = URLS[url]
  
        ret = func_name(url)
  
    else:
  
        ret = "404"
  
    return ret
  

  
if __name__ == '__main__':
  
    httpd = make_server('', 8000, RunServer)
  
    httpd.serve_forever()
  通过本机的curl命令去访问测试
yangwen@yangwen:~$ curl 127.0.0.1:8000/index  
<h1>/index</h1>ansheng@Darker:~$ curl 127.0.0.1:8000/asdasd
  
404yangwen@yangwen:~$ curl 127.0.0.1:8000/manage
  
/manage
  无论多么复杂的Web应用程序,入口都是一个WSGI处理函数。HTTP请求的所有输入信息都可以通过environ获得,HTTP响应的输出都可以通过start_response()加上函数返回值作为Body,复杂的Web应用程序,光靠一个WSGI函数来处理还是太底层了,我们需要在WSGI之上再抽象出Web框架,进一步简化Web开发。
MVC and MTV
  MVC模式就是架构模式的一种,MVC模式的目的是实作一种动态的程式设计,使后续对程式的修改和扩充功能简化,并且使程式某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程式结构更加直觉。

  软体系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:

  •   控制器Controller - 负责转发请求,对请求进行处理;
  •   视图View - 介面设计人员进行图形介面设计;
  •   模型Model - 程式设计师编写程式应有的功能(实作演算法等等)、资料库专家进行资料管理和资料库设计(可以实作具体的功能);
  MVC中的M是代表MODLE层,V代表VIEW层,C代表Contrl层. MTV中的M是代表MODLE层,T代表Template(模板层),V代表VIEW层.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-550655-1-1.html 上篇帖子: vim配置python 开发环境 下篇帖子: Python网络编程之线程与进程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表