(四)Openstack学习之WSGI:自己动手写例子

WSGI 是Web Services Gateway Interface的缩写. 如果想深入了解,可以阅读 PEP
333
 文档,包含有任何你想要的:)community errata, .这篇文章将手把手教你写一个简单的WSGI例子。

注意:我用的Python版本是.2.7.x.

最经典,最简答的WSGI样当属 Hello
World
 app.

咱们将要用到 virtualenv 去创建一个封闭的Python项目环境:

$
virtualenv wsgi-example

$
cd wsgi-example

$
source bin/activate

然后在该目录下新建一个文件: wsgi_app.py 并且添加如下的代码 :

from

__future__
import

print_function

from

wsgiref.simple_server
import

make_server

def

myapp(environ, start_response):

    response_headers
=

[(
‘content-type‘,
‘text/plain‘)]

    start_response(‘200
OK‘
,
response_headers)

    return

[
‘Hello
World‘
]

app
=

myapp

httpd
=

make_server(‘‘,
8080,
app)

print("Starting
the server on port 8080"
)

httpd.serve_forever()

把项目跑起来:

$
python wsgi_app.py

之后就可以测试啦,测试有浏览器或者命令cURL两种方式,返回的应该是hello world 哦:

$
curl http://localhost:8080 -v

上面这个例子虽然清晰,但是一点都不爽啊so easy。let‘s high 起来。接下来我们继续往里面赛一条消息 。

修改 wsgi_app.py 文件成下面这个样纸:

from

__future__
import

print_function

from

wsgiref.simple_server
import

make_server

from

urlparse
import

parse_qs

def

myapp(environ, start_response):

    msg
=

‘No Message!‘

    response_headers
=

[(
‘content-type‘,
‘text/plain‘)]

    start_response(‘200
OK‘
,
response_headers)

    qs_params
=

parse_qs(environ.get(
‘QUERY_STRING‘))

    if

‘msg‘

in

qs_params:

            msg
=

qs_params.get(
‘msg‘)[0]

    return

[
‘Your
message was: {}‘
.format(msg)]

app
=

myapp

httpd
=

make_server(‘‘,
8080,
app)

print("Starting
the server on port 8080"
)

httpd.serve_forever()

把程序跑起来,测试还是刚才那样。如果程序还在运行中,可以CTRL+C快捷键暂停并且重启。

$
curl http://localhost:8080/?msg=Hello -v

接下来,让我们继续聊中间件。你可以在这里 获得一些信息。这里我会写一个添加了HTTP 头回复的中间层例子。中间件可以做任何你能够想象的到的事情,例如session,认证等等。

中间件例子:

from

__future__
import

print_function

from

wsgiref.simple_server
import

make_server

def

myapp(environ, start_response):

    response_headers
=

[(
‘content-type‘,
‘text/plain‘)]

    start_response(‘200
OK‘
,
response_headers)

    return

[
‘Check
the headers!‘
]

class

Middleware:

    def

__init__(
self,
app):

        self.wrapped_app
=

app

    def

__call__(
self,
environ, start_response):

        def

custom_start_response(status, headers, exc_info
=None):

            headers.append((‘X-A-SIMPLE-TOKEN‘,
"1234567890"))

            return

start_response(status, headers, exc_info)

        return

self
.wrapped_app(environ,
custom_start_response)

app
=

Middleware(myapp)

httpd
=

make_server(‘‘,
8080,
app)

print("Starting
the server on port 8080"
)

httpd.serve_forever()

访问终端:

$
curl http://localhost:8080/ -v

结果差不多应该是介个样子的:

*
Connected to localhost (127.0.0.1) port 8080 (#0)

>
GET / HTTP/1.1

>
User-Agent: curl/7.30.0

>
Host: localhost:8080

>
Accept: */*

>

*
HTTP 1.0, assume close after body

<
HTTP/1.0 200 OK

<
Date: Sat, 08 Feb 2014 00:16:00 GMT

<
Server: WSGIServer/0.1 Python/2.7.5

<
content-type: text/plain

<
X-A-SIMPLE-TOKEN: 1234567890

<
Content-Length: 18

<

*
Closing connection 0

(四)Openstack学习之WSGI:自己动手写例子,码迷,mamicode.com

时间: 2024-10-16 05:40:39

(四)Openstack学习之WSGI:自己动手写例子的相关文章

自己动手写CPU之第四阶段(2)——验证第一条指令ori的实现效果

将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第12篇,我尽量每周四篇 书名又之前的<自己动手写处理器>改为<自己动手写CPU> 4.3 验证OpenMIPS实现效果 4.3.1指令存储器ROM的实现 本节将验证我们的OpenMIPS是否实现正确,包含:流水线是否正确.ori指令是否实现正确.在验证之前,需要首先实现指令存储器,以便OpenMIPS从中读取指令. 指令存储器模块是只读的,其接口如图4-7所示,还是采用左边是输入接口,右边是输出接口的方式绘

【原创】连“霍金”都想学习的“人工智能”---【自己动手写神经网络】小白入门连载开始了(1)

欢迎关注[自己动手写神经网络]的博客连载!!! 第1章 神经网络简介 神经网络这个词,相信大家都不陌生.就在你打开本书,并试图了解神经网络时,你已经在使用一个世界上最复杂的神经网络——你的大脑,一个由大约1000亿个神经元(每个单元拥有约1万个连接)构成的复杂系统.但人的大脑太过复杂,以至于科学家们到目前为止仍然无法准确解释大脑的工作原理和方式.但有幸的是,生物神经网络的最最基本的元素已经能够被识别,而这就构成了本书想为你介绍的人工神经网络(Artificial Neural Network).

连“霍金”都想学习的“人工智能”---【自己动手写神经网络】小白入门连载开始了(1)

欢迎关注[自己动手写神经网络]的博客连载!!! 第1章 神经网络简介 神经网络这个词,相信大家都不陌生.就在你打开本书,并试图了解神经网络时,你已经在使用一个世界上最复杂的神经网络--你的大脑,一个由大约1000亿个神经元(每个单元拥有约1万个连接)构成的复杂系统.但人的大脑太过复杂,以至于科学家们到目前为止仍然无法准确解释大脑的工作原理和方式.但有幸的是,生物神经网络的最最基本的元素已经能够被识别,而这就构成了本书想为你介绍的人工神经网络(Artificial Neural Network).

自己动手写CPU之第四阶段(3)——MIPS编译环境的建立

将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第13篇.我尽量每周四篇 4.4 MIPS编译环境的建立 OpenMIPS处理器在设计的时候就计划与MIPS32指令集架构兼容,所以能够使用MIPS32架构下已有的GNU开发工具链.本节将说明怎样安装使用GNU开发工具链以及怎样制作Makefile文件.从而以更加方便.快捷.自己主动的方式对測试程序进行编译.并得到指令存储器ROM的初始化文件inst_rom.data. 4.4.1 VisualBox的安装与设置 GNU工具链要安装

Duanxx的神经网络学习: 自己动手写神经网络(二) 前馈网络的实现

本文是继续Duanxx的神经网络学习: 自己动手写神经网络(一) 搭建一个简单的网络框架 写的第二篇文章,将神经网络的前馈网络实现并测试. 本文的代码下载地址 1 为神经元Neuron添加权Weight 在上一篇文章中,我已经搭起了一个神经网络的框架. 但是那只是一个框架而已,什么都没有是实现,而这个框架的最基本的东西就是神经元Nenron,这里就考虑将Neuron实现一下. 对于一个神经元而言,它的输入是上一层神经元的输出,可以不用太关心,它也有自己的输出outputvalue,同时,它还要控

学习【神经网络】最好的书来了《自己动手写神经网络》电子书在百度阅读上线!

葛一鸣老师写作的<自己动手写神经网络>电子书在百度阅读上线了. 主页:http://t.cn/RPjZvzs. <自己动手写神经网络>面向智能设备爱好者.计算机科学爱好者.极客.程序猿.人工智能爱好者和物联网从业人员,是目前市场上第一本也是唯一一本采用Java打造的神经网络图书. <自己动手写神经网络>内容简单.趣味性强,是一本面向神经网络的通俗类读物,对了解我们人类自身.了解人类的思维和行为,有重要的意义!对掌握遗传算法的实质性应用有实践作用! <自己动手写神经

自己动手写处理器之第四阶段(1)——第一条指令ori的实现

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第11篇,我尽量每周四篇 第4章 第一条指令ori的实现 前面几章介绍了很多预备知识,也描绘了即将要实现的OpenMIPS处理器的蓝图,各位读者是不是早已摩拳擦掌,迫切希望一展身手了,好吧,本章我们将实现OpenMIPS处理器的第一条指令ori,为什么选择这条指令作为我们实现的第一条指令呢?答案就两个字--简单,指令ori用来实现逻辑"或"运算,选择一条简单的指令有助于我们排除干扰,将注意力集中在流水线结构的实现

自己动手写CPU之第四阶段(4)——Makefile文件建立

将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第14篇,我尽量每周四篇 4.4.6 编写Makefile文件 为了得到指令存储器初始化文件,我们需要输入4条命令,有点麻烦,最好只输入一条命令就可以了,这需要使用到Makefile文件.在汇编程序inst_rom.S所在目录下新建一个Document,文件名为Makefile,内容如下. ifndef CROSS_COMPILE CROSS_COMPILE = mips-sde-elf- endif CC = $(CROSS_CO

Python学习第四天学习写的小案例(主要是针对 分支/循环的学习)

Python学习第四天学习写的小案例 (2019/07/17) 第一题:使用while循环输出1 2 3 4 5 6 8 9 10 程序代码: s = 0 while s<10: if s==6: s += 1 # 当数字为7的时候输出一个空格出来 print(end=' ') continue s += 1 print(s,end=' ') 运行结果: 1 2 3 4 5 6 8 9 10 第二题: 求1-100的所有数的和 程序代码: count = 0 for i in range(101