Python全栈之路系列之Web框架介绍

所有的语言Web框架本质其实就是起一个socket服务端,监听一个端口,然后运行起来

Web框架包含两部分,一部分是socket,另外一部分是业务的逻辑处理,根据请求的不同做不同的处理


Python的Web框架分成了两类,

  1. 即包含socket也包含业务逻辑处理的(tornado)

  2. 不包含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处理函数,它接收两个参数:

  1. environ:一个包含所有HTTP请求信息的dict对象;

  2. 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/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命令去访问测试

1
2
3
4
5
6
ansheng@Darker:~$ curl 127.0.0.1:8000/index
<h1>/index</h1>
ansheng@Darker:~$ curl 127.0.0.1:8000/asdasd
404
ansheng@Darker:~$ 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模式的目的是实作一种动态的程式设计,使后续对程式的修改和扩充功能简化,并且使程式某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程式结构更加直觉。

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

  1. 控制器Controller - 负责转发请求,对请求进行处理;

  2. 视图View - 介面设计人员进行图形介面设计;

  3. 模型Model - 程式设计师编写程式应有的功能(实作演算法等等)、资料库专家进行资料管理和资料库设计(可以实作具体的功能);

MVC中的M是代表MODLE层,V代表VIEW层,C代表Contrl层.
MTV中的M是代表MODLE层,T代表Template(模板层),V代表VIEW层.

本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/1918242,如需转载请自行联系原作者

1Python全栈之路系列Web框架介绍相关推荐

  1. 1Python全栈之路系列之MySQL数据库基本操作

    Python全栈之路系列之MySQL数据库基本操作 MySQL数据库介绍 MySQL是一种快速易用的关系型数据库管理系统(RDBMS),很多企业都在使用它来构建自己的数据库. MySQL由一家瑞典公司 ...

  2. 8Python全栈之路系列之Django Cookie 与Sessi

    Python全栈之路系列之Django Cookie与Sessi Cookies cookies是浏览器为Web服务器存储的一小段信息,每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的coo ...

  3. 4Python全栈之路系列之Django模型

    Python全栈之路系列之Django模型 MTV开发模式 把数据存取逻辑.业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的Model-View-Controller(MVC)模式.在这个模式中 ...

  4. 2Python全栈之路系列之基于socket实现聊天机器人

    Python全栈之路系列之基于socket实现聊天机器人 通过socket实现局域网内的聊天工具. service.py文件如下: #!/usr/bin/env python # _*_ coding ...

  5. 2Python全栈之路系列之MysQl基本数据类型

    Python全栈之路系列之MySQL基本数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类: 数字类型 日期和时间类型 字符串类型 数字类 ...

  6. 5Python全栈之路系列之字符串格式化

    Python全栈之路系列之字符串格式化 This PEP proposes a new system for built-in string formatting operations, intend ...

  7. 4python全栈之路系列之scrapy爬虫s

    python全栈之路系列之scrapy爬虫 An open source and collaborative framework for extracting the data you need fr ...

  8. 7Python全栈之路系列之Django表单

    Python全栈之路系列之Django表单 从Request对象中获取数据 HttpRequest对象包含当前请求URL的一些信息: 熟悉/方法 描述 例如 request.path 除域名以外的请求 ...

  9. Python全栈之路系列之数字数据类型

    上篇文章中我们简单的体验了Python语言基本概念与语法,那么在继续深入下去的过程中,不妨先学习几个常见的Python内置数据类型?这也是大部分Python教科书的学习目录,由浅至深,慢慢深入. Py ...

最新文章

  1. C#中Base64之编码,解码方法
  2. c语言考试经典编程题目及答案,经典练习C语言编程的题目及答案整理
  3. 升级oracle spu,Oracle 2017改变:新补丁更新(RU和RUR),新的版本(Release 18和19)
  4. Oracle等待事件之Latch Free
  5. 【计算机网络】计算机网络 OSI 参考模型 与 TCP/IP 参考模型 对比
  6. 6、MySQL查看和修改事务隔离级别
  7. Android高效编程注意事项
  8. Sqlit--学习教程(基本操作1)
  9. 3V升压5V芯片,3V升压5V的电路图
  10. 互联网公司在三四线城市的竞争中的聪(sang)明(xin)才(bing)智(kuang)
  11. MD5、SHA1、SHA256、SHA512
  12. ArcGIS中WGS84转为西安80(无自带转换参数的坐标系转换)
  13. 从安卓recovery 的 backup 备份数据中手动恢复 通讯录、短信,或者其他软件中的信息的方法
  14. __ffs 源码分析
  15. 如何实现今日头条跳转到微信?
  16. Adobe Audition生成正弦波音频
  17. C语言指针类型的意义
  18. 弊润落幅跨越60%的无5野婆司
  19. dolphinscheduler_sql_调用时间参数
  20. 直播平台对企业的作用有哪些

热门文章

  1. 55种网页常用小技巧(转载)
  2. xxx.jar 中没有主清单属性
  3. 将一张表的主键(ID)重置为从1开始自增排列
  4. [No0000E6]C# 判断与循环
  5. centos7 安装 python3.5
  6. C# Web实时消息后台服务器推送技术-GoEasy
  7. .NET基础 (03)生成、部署和管理
  8. rebuild online意外终止导致ora-8104错误的实验
  9. 修改6S Fortran77 代码,建立查找表
  10. mysql 查询语句_SQL语言mysql基础查询语句