码迷,mamicode.com
首页 > 编程语言 > 详细

Python WSGI开发随笔

时间:2014-11-09 18:02:12      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   os   sp   for   div   on   

  本文记录学习WSGI时的一些知识点,值得后续学习中注意。

  wsgi应用接口只要是一个可调用的对象就行,这个可调用的对象需要:

1. 接受两个位置参数:

  a. 包含CGI形式变量的字典;

  b. 应用调用的回调函数,该回调函数的作用是将HTTP响应的状态码和header返回给server。

2. 将响应body部分的内容作为包裹在一个可迭代的对象中的(若干)字符串。

 

说明:

  1. application 的第一个参数env是一个字典,里面包含了CGI形式的环境变量,该字典是由server基于客户请求填充。

  2. headers在构建的时候,必须遵循以下规则:

    [(Header name1, Header value1), (Header name2, Header value2),]
   响应header和响应HTTP状态码通过应用的第二个参数即回调函数发回给server。

  3.body在构建的时候,必须遵循以下规则:
    [response_body]
  即响应body必须被包裹在可迭代的对象中,同时通过return 语句返回给server.

 

下面是wsgi.org官方教程中得到一个例子:

  注意environ参数的含义,start_response函数的作用,response_headers和status是由谁返回给server的,response_body需要什么样的形式,如何返回给server等。

from wsgiref.simple_server import make_server

def application( environ, start_response):
    # response_body in a list
    response_body = [‘%s:%s‘ %(key, value)
        for key, value in sorted(environ.items())]
    response_body = ‘\n‘.join(response_body)
    response_body = [‘The Begining\n‘,
                        ‘*‘ * 30 + ‘\n‘,
                        response_body,
                        ‘\n‘ + ‘*‘ * 30 ,
                        ‘\nThe End‘]
    
    content_length = 0
    for s in response_body:
        content_length += len(s)
    
   #status code and response_headers
    status = ‘200 OK‘
    response_headers =[(‘Content-Type‘, ‘text/plain‘),
        (‘Content-Length‘, str(content_length))]
    # use callback function to send back status code 
    # and response headers
    start_response(status, response_headers)
    # return response body thruogh return statement
  return response_body


httpd = make_server(‘localhost‘,8051,application)
httpd.handle_request() 

  

  

Python WSGI开发随笔

标签:blog   http   io   ar   os   sp   for   div   on   

原文地址:http://www.cnblogs.com/Security-Darren/p/4085592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!