wsgi是什么

WSGI是什么?摸索了一两个月还没怎么弄清楚。之所以没弄清楚,不在于WSGI有多复杂,
而是目前基于WSGI的框架(如Django)和应用服务(如openstack)过于复杂。再加上它们
使用一些辅助的Lib库(如Route,webob,eventlet等)使得学习起来有点过于繁杂。本能的
好奇,使得在看代码时,碰到一个不懂的类库,不懂的函数都无法继续,想一探究竟。然而
这种好奇却给了懒惰一个的很好的接口,每当碰到不懂的函数时,会去找相关的文档,一般是
英文的,看一会不懂,看中文的,有点懂,然后发呆,不知道干嘛。。。再然后就可以回去吃
饭睡觉了。。。
好了,还是回到主题吧!
WSGI是Python在处理HTTP请求时,规定的一种处理方式。如一个HTTP Request过来了,那
么就有一个相应的处理函数来进行处理和返回结果。WSGI就是规定这个处理函数的参数长啥
样的,它的返回结果是长啥样的?至于该处理函数的名子和处理逻辑是啥样的,那无所谓。简单
而言,WSGI就是规定了处理函数的输入和输出格式。
WSGI不涉及任何网络服务器的实现,只规定了处理函数的实现,这里的处理函数也就是server上
的application。
python自带库中提供了一个简单的WSGI server,可以用来体验下WSGI应用的格式:
1 #!/usr/bin/env python
2
3
4 from wsgiref.simple_server import make_server
5 #规定参数第一个为environ,此为server传过来的,包含所有request相关的信息。start_response
#是server传的函数,用于返回status和headers。
6 def hello_world_app(environ, start_response):
7 status = '200 OK'
8 headers = [('Content-type', 'text/plain')]
9 print environ
10 start_response(status,headers) #调用以返回status和headers
11 #规定返回结果为list类型
12 return ["hello world"]
13
14 httpd = make_server('', #listen ip
15 8000, #listen port
16 hello_world_app) #appilication name
17
18 print "Serving on port 8000..."
19 httpd.serve_forever()

运行该脚本,用浏览器访问localhost:8000就可以得到hello world了。


environ是一个dict,但是wsgi是否规定environ必须存放哪些字段,我们应该怎样使用environ呢?
start_response是一个函数,这个函数它是怎么与server交互的呢?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值