Python WSGI开发随笔

  本文记录学习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()

  

  

时间: 2024-10-12 16:46:24

Python WSGI开发随笔的相关文章

Python Web开发 - WSGI & uWSGI协议

WSGI协议 首先弄清下面几个概念:WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通信的规范.server和application的规范在PEP 3333中有具体描述.要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有Bottle, Flask, Djang

Python Web开发中,WSGI协议的作用和实现原理详解

首先理解下面三个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通信的规范. uwsgi:与WSGI一样是一种协议,是uWSGI服务器的独占协议,用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi协议的

Python Web开发最难懂的WSGI协议,到底包含哪些内容?

原文出处: PythonScientists 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有开发者希望马上给自己做个博客出来,例如我),既然是WEB,免不了接触到一些WEB框架,例如Django,Flask,Torando等等,在开发过程中,看过一些文档总会介绍生产环境和开发环境服务器的配置问题,服务器又设计web服务器和应用服务器,总而言之,我们碰到最多的,必定是这个词 — WSGI. 接下来的文章,会分为以下几个部分: 1.WSGI介绍 1.1什么是WSGI 1.2怎么

python WSGI框架详解

1.web应用的本质1)浏览器发送一个HTTP请求2)服务器收到请求,生成一个HTML文档3)服务器把HTML文档作为HTTP响应的body发个浏览器4)浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示 2.什么是WSGI,为什么需要WSGI上面的web应用过程,如果由我们自己来实现是复杂的,接收HTTP请求,解析HTTP请求,响应HTTP请求等.通常这些操作都由WSGI服务器来完成,WSGI(Web Server Gateway Interface)定义了WSGI服务器执行的

用virtualenv建立多个Python独立开发环境

不同的人喜欢用不同的方式建立各自的开发环境,但在几乎所有的编程社区,总有一个(或一个以上)开发环境让人更容易接受. 使用不同的开发环境虽然没有什么错误,但有些环境设置更容易进行便利的测试,并做一些重复/模板化的任务,使得在每天的日常工作简单并易于维护. 什么是virtualenv? 在Python的开发环境的最常用的方法是使用 virtualenv 包. Virtualenv是一个用来创建独立的Python环境的包.现在,出现了这样的问题:为什么我们需要一个独立的Python环境? 要回答这个问

Python CMDB开发

Python CMDB开发 运维自动化路线: cmdb的开发需要包含三部分功能: 采集硬件数据 API 页面管理 执行流程:服务器的客户端采集硬件数据,然后将硬件信息发送到API,API负责将获取到的数据保存到数据库中,后台管理程序负责对服务器信息的配置和展示. 采集硬件信息 采集硬件信息可以有两种方式实现: 利用puppet中的report功能 自己写agent,定时执行 两种方式的优缺点各异:方式一,优点是不需要在每台服务器上步一个agent,缺点是依赖于puppet,并且使用ruby开发:

研究python服务器开发

研究python服务器开发http://www.example-code.com/python/ssh_exec.asp telnet 118.193.152.71 51234 import socket, threading HOST = '127.0.0.1' PORT = 51234 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(4) clients = [] #lis

每天进步一点点——Ganglia的Python扩展模块开发

转载请说明出处:http://blog.csdn.net/cywosp/article/details/39701245 注:本文涉及到的代码都在centos 6.5 64bit系统上通过验证,Ganglia版本为3.1,通过yum安装具体步骤请参考: http://blog.csdn.net/cywosp/article/details/39701141 1. 概述 Ganglia 项目是由加州大学发起的,现在已经成为一个应用非常广泛集群监控软件.可以监视和显示集群中的节点的各种状态信息,比如

Python服务器开发一:python基础

Python服务器开发一:python基础 Python(蟒蛇)是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上使用. [特点] 1 Python使用C语言开发,但是Python不再有C语言中的指针等复杂的数据类型. 2 Python具有很强的面向对象特性,而且简化了面向对象的实现.它消除了保护类型.抽象类.接口等面向对象的元素. 3 Python代码块使用空格或制表符缩进的方式分隔代码. 4 Python仅