python+fastcgi+flup获取请求的数据和环境变量

 关于nginx+python+fastcgi+flup搭建fastcgi环境没问题了,可是如何处理POST/GET的请求数据呢,这个问题着实纠结了没久,通过尝试和阅读flup的源代码,终于明白了。先上个例子

 

[python]  view plain  copy
 
  1. #!/usr/bin/env python  
  2. #coding=utf-8  
  3. #author:naiveloafer  
  4. #date:2012-06-07  
  5.   
  6. from flup.server.fcgi import WSGIServer  
  7.   
  8. def get_environ(environ):  
  9.     rquest_method = environ["REQUEST_METHOD"]  
  10.     str = "rquest_method:" + rquest_method + "\r\n"  
  11.     query_string = environ["QUERY_STRING"]  
  12.     str += ",query_string:" + query_string + "\r\n"  
  13.     script_filename = environ["SCRIPT_FILENAME"]  
  14.     str += ",script_filename:" + script_filename + "\r\n"  
  15.     script_name = environ["SCRIPT_NAME"]  
  16.     str += ",script_name:" + script_name + "\r\n"  
  17.     rquest_uri = environ["REQUEST_URI"]  
  18.     str += ", rquest_uri:" + rquest_uri + "\r\n"  
  19.     remote_addr = environ["REMOTE_ADDR"]  
  20.     str += ",remote_addr:" + remote_addr + "\r\n"  
  21.     remote_port = environ["REMOTE_PORT"]  
  22.     str += ",remote_port:" + remote_port + "\r\n"  
  23.       
  24.     data = environ["wsgi.input"].read()  
  25.     str += ", data:" + data + "\r\n"  
  26.     return str      
  27.   
  28. def naiveloafer_app(environ, start_response):  
  29.     start_response('200 OK', [('Content-Type', 'text/plain')])  
  30.     content = get_environ(environ)  
  31.     return [content]  
  32.   
  33. if __name__  == '__main__':  
  34.    WSGIServer(naiveloafer_app).run()  

 

 

总结说明

        1、naiveloafer_app是请求处理的过程,所有处理放到这个函数中,每一个请求,该函数就运行一次,函数名可以自定义。

         2、该函数有两个参数,第一个environ是个字典,记录了很多有用的信息。

         3、environ["wsgi.input"]是输入流的数据,返回的是一个InputStream对象,查看源文件flup/server/fcgi_base.py发现InputStream是一个类,提供了read()、readln()等一些方法,并且有详细的注释说明,于是下面就知道如何做了。

 

发送请求:

[plain]  view plain  copy
 
  1. curl -d"name=naiveloafer&age=24&sex=male&single=1" http://10.11.8.105:83/naiveloafer.cgi?cmd=123   

收到响应:

 

 

[plain]  view plain  copy
 
  1. rquest_method:POST  
  2. ,query_string:cmd=123  
  3. ,script_filename:/usr/local/nginx-1.2.1/html/naiveloafer.cgi  
  4. ,script_name:/naiveloafer.cgi  
  5. , rquest_uri:/naiveloafer.cgi?cmd=123  
  6. ,remote_addr:10.10.20.208  
  7. ,remote_port:52283  
  8. , data:name=naiveloafer&age=24&sex=male&single=1  

 

 

参考文章

Django源码解析(三) Django开发服务器,WSGI规范实现.:http://www.cnblogs.com/pythoner/archive/2011/08/13/2137442.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值