学写python的时候,咱们多多少少都接触到了web程序,然而你有没有想过,当浏览器发送了一个http请求时,等待接收这个请求的后端代码是一种什么样的思想感情?php
就像下面这张图里画的同样,后端也许是一段java代码,也许是php代码,固然,若是代码出自我手,最可能的仍是一段python代码。这就比如,当你在社交软件上给一个陌生人发了一条消息,对面这我的多是英国人、印度人也有多是一只羊或者一只狗。。。那么问题来了,他们怎么知道你在说啥?固然了,在web服务的世界里没有现实中那么复杂,咱们不须要考虑后台接收请求的是一只羊。。。接下来咱们就来看看,在url和代码之间到底发生了什么见不得人的事儿~java
首先,当咱们写了一段代码能够被http访问的时候,咱们就创建了一个webserver。从下图中咱们不难看出,这就是浏览器和web服务器之间的平常工做,对于服务器来讲,要作的5件事情中,只有第3件是根据请求的不一样在发生变化的:python
所以,本着解耦的思想,就有人提出了新的方案,将服务器端反复作的事情独立出来,封装起来,对于程序员来讲,咱们只须要关注处理请求的部分,有专门的逻辑替咱们处理这万年不变的4步,是否是就使得代码简洁了不少?程序员
然而,当咱们这么作以后,服务器和app之间就再也不是紧密团结在一块儿的总体,服务器必须知道要讲接收到的请求、参数以什么方式传达到app端,这就是咱们在django中可使用request.method、request.POST.get等方法的缘由——约好了呀,说高大上点儿,这种约定就叫作协议!web
下图是咱们在写django时常常作的事情,左侧是一个http请求,右侧是python代码,咱们只须要在代码里写一个函数,url配一配,就可使用左侧的url请求到后端的代码,为何如此顺利,是什么让http和python代码之间的代沟消失了?django
以Django框架为例,Django在这个过程当中作了哪些事儿呢?它就是很贴心的把整个服务器要作的事情以及服务器和app交互的过程给封装起来了呀~~~后端
这么提及来,Django对咱们的代码来讲,真是又当爹又当妈的模范家长啊!浏览器
固然啦!除了Django以外,python还有不少其余的web框架、模块都作了一样的封装,他们也能对http请求进行分析,并承担起和后台代码交互的重任,然而咱们知道人与人之间即使是交流一样的事情也有不少种不一样的表达方式,所以,咱们说,虽然一样是作http和代码的交互工做,但对协议的定义可能不尽相同。服务器
下面列举一些常见的 Python HTTP 服务器,以及它们目前的大体发展状况,以便用户的对比选择:app
Name | Version | http 1.1 | Flavour | Repo. | Community |
---|---|---|---|---|---|
Gunicorn | 0.6.4 | No | processor/thread | GIT | #gunicorn |
uWSGI | Trunk (253) | Yes | processor/thread | repo | Mailing List |
FAPWS3 | 0.3.1 | No | processor/thread | GIT | Google Groups |
Aspen | 0.8 | No | processor/thread | SVN | Google Groups |
Mod_WSGI | 3.1 | Yes | processor/thread | SVN | Google Groups |
wsgiref | Py 2.6.4 | No | processor/thread | SVN | Mailing List |
CherryPy | 3.1.2 | Yes | processor/thread | SVN | Planet, IRC |
Magnum Py | 0.2 | No | processor/thread | SVN | Google Groups |
Twisted | 10.0.0 | Yes | processor/thread | SVN | Community |
Cogen | 0.2.1 | Yes | callback/generator | SVN | Google Groups |
GEvent | 0.12.2 | Yes | lightweight threads | Mercurial | Google Groups |
Tornado | 0.2 | Yes | callback/generator | GIT | Google Groups |
Eventlet | 0.9.6 | Yes | lightweight threads | Mercurial | Mailinglist |
Concurrence | tip | Yes | lightweight threads | GIT | Google Groups |
参考:http://www.nowamagic.net/academy/detail/1330308