uWSGI基础攻略

uWSGI的安装就不多说了、不懂的参考前面的文章、以下例子都是以http的形式来启动、比如莪的py文件名称叫做return_enviorn.py、那么便是这么来执行、如果迩想查看效果、请打开http://hostip:9090来查看

./uwsgi --http :9090 --wsgi-file ../program/py_script/return_enviorn.py

 

 

关于uWSGI最简单的形式如下、其中的environ包含了各种从客户端带来的信息

# This is our application object. It could have any name,
#
except when using mod_wsgi where it must be "application"
def application( # It accepts two arguments:
# environ points to a dictionary containing CGI like environment variables
# which is filled by the server for each received request from the client
environ,
# start_response is a callback function supplied by the server
# which will be used to send the HTTP status and headers to the server
start_response):

# build the response body possibly using the environ dictionary
response_body = 'The request method was %s' % environ['HTTP_USER_AGENT']

# HTTP response code and message
status = '200 OK'

# These are HTTP headers expected by the client.
# They must be wrapped as a list of tupled pairs:
# [(Header name, Header value)].
response_headers = [('Content-Type', 'text/plain'),
('Content-Length', str(len(response_body)))]

# Send them to the server using the supplied function
start_response(status, response_headers)

# Return the response body.
# Notice it is wrapped in a list although it could be any iterable.
return [response_body]


假如莪们把environ['HTTP_USER_AGENT']改成environ、则是输出所有信息、比如这样

 

 1 The request method was {
2 'SCRIPT_NAME': '',
3 'REQUEST_METHOD': 'GET',
4 'UWSGI_ROUTER': 'http',
5 'SERVER_PROTOCOL': 'HTTP/1.1',
6 'QUERY_STRING': '',
7 'HTTP_USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)',
8 'HTTP_CONNECTION': 'Keep-Alive',
9 'SERVER_NAME': 'M12-129',
10 'REMOTE_ADDR': '172.16.1.3',
11 'HTTP_THREADID': '4416',
12 'wsgi.url_scheme': 'http',
13 'SERVER_PORT': '9090',
14 'uwsgi.node': 'M12-129',
15 'wsgi.input': <uwsgi._Input object at 0x1a895b0>,
16 'HTTP_HOST': '172.16.3.129:9090',
17 'wsgi.multithread': False,
18 'REQUEST_URI': '/',
19 'HTTP_ACCEPT': 'image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*',
20 'wsgi.version': (1, 0),
21 'wsgi.run_once': False,
22 'wsgi.errors': <open file 'wsgi_input', mode 'w' at 0x7f5bf60644b0>,
23 'wsgi.multiprocess': False,
24 'HTTP_ACCEPT_LANGUAGE': 'zh-CN',
25 'uwsgi.version': '0.9.8.6',
26 'wsgi.file_wrapper': <built-in function uwsgi_sendfile>,
27 'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
28 'PATH_INFO': '/'
29 }

 可是看出、这个environ里面所包含的信息和CGI的环境变量非常的相似、但又有所不同、比如有包括了UWSGI的路由形式、UWSGI的多线程和多进程情况等等、应该可以说是CGI环境变量的加强版本

 

 

 1 #!/usr/bin/env python
2
3 from wsgiref.simple_server import make_server
4 from cgi import parse_qs, escape
5
6 html = """
7 <html>
8 <body>
9 <form method="get" action="parsing_get.wsgi">
10 <p>
11 Age: <input type="text" name="age">
12 </p>
13 <p>
14 Hobbies:
15 <input name="hobbies" type="checkbox" value="software"> Software
16 <input name="hobbies" type="checkbox" value="tunning"> Auto Tunning
17 </p>
18 <p>
19 <input type="submit" value="Submit">
20 </p>
21 </form>
22 <p>
23 Age: %s<br>
24 Hobbies: %s
25 </p>
26 </body>
27 </html>"""
28
29 def application(environ, start_response):
30
31 # Returns a dictionary containing lists as values.
32 d = parse_qs(environ['QUERY_STRING'])
33
34 # In this idiom you must issue a list containing a default value.
35 age = d.get('age', [''])[0] # Returns the first age value.
36 hobbies = d.get('hobbies', []) # Returns a list of hobbies.
37
38 # Always escape user input to avoid script injection
39 age = escape(age)
40 hobbies = [escape(hobby) for hobby in hobbies]
41
42 response_body = html % (age or 'Empty',
43 ', '.join(hobbies or ['No Hobbies']))
44
45 status = '200 OK'
46
47 # Now content type is text/html
48 response_headers = [('Content-Type', 'text/html'),
49 ('Content-Length', str(len(response_body)))]
50 start_response(status, response_headers)
51
52 return [response_body]
53
54 httpd = make_server('localhost', 8051, application)
55 # Now it is serve_forever() in instead of handle_request().
56 # In Windows you can kill it in the Task Manager (python.exe).
57 # In Linux a Ctrl-C will do it.
58 httpd.serve_forever()

 

 

 其中第32行的函数parse_qs()是个解析网页请求参数为数组的冬冬、具体的用法可以看下面的这个例子

1 import urlparse
2 qsdata = "test=test&test2=test2&test2=test3"
3 qs = urlparse.parse_qs(qsdata)
4 print qs

输出:

{'test': ['test'], 'test2': ['test2', 'test3']}

 

转载于:https://www.cnblogs.com/klobohyz/archive/2011/12/14/2287181.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql语句ding_mybatis plus 写sql语句

一、api:public MapselectManagerList(ManagerBean managerBean){Page page new Page(managerBean.getPage()null ? 1:managerBean.getPage(),managerBean.getPageSize()null ? 10 :managerBean.getPageSize());try {return managerService.selectManagerList(page,managerB…

Resharper 和 Rider 的奇淫技巧,你知道多少?

.NET 开发中最令人印象深刻的生产力工具之一是ReSharper[1]。每次发布时&#xff0c;我都对它的功能感到震惊。不要误会我的意思&#xff0c;我喜欢 Visual Studio&#xff0c;而且它也变得越来越好。但每当我认为 Visual Studio 迎头赶上时&#xff0c;我就会发现一些令人惊叹…

流量节省模式 Android,这三种方法让你节省更多手机上网流量

大多数手机用户应该都知道最基本的流量管理方式——没有Wi-Fi可用时就不看视频、不玩在线游戏、或者下载大型应用——除非你拥有不限流量套餐。但如果你在使用流量时已经很节约&#xff0c;但每个月的用量依然会超出流量套餐&#xff0c;那下面这三种方法应该可以确保你不会浪费…

同一个PC只能运行一个应用实例(考虑多个用户会话情况)

原文:同一个PC只能运行一个应用实例(考虑多个用户会话情况)1 class Program2 {3 private static Mutex m;4 5 [STAThread]6 static void Main() 7 {8 bool createNew false;9 10 /* 11 * 在运行终端服务的服务器上&am…

PS比狠大赛!看看谁家的照片更丑!

全世界只有3.14 % 的人关注了爆炸吧知识最近在网上看到一个“丑照片挑战”本来以为就是丑吧结果一看惊了张张都是文艺大片范儿一点都不丑至于为什么叫丑照片挑战赛来看看他们的实拍背景就知道了比如第一张小姐姐的酷拽镜头靠的竟然是餐桌上这盆小绿植第二张的帅气小哥哈哈哈对不…

国学

国学&#xff0c;一国所固有之学术也。国学和文学数学的意思不同&#xff0c;并非是国家之学或者治国之学。一般来说&#xff0c;国学是指以儒学为主体的中华传统文化与学术。国学是中国传统文化与学术&#xff0c;也包括了医学、戏剧、书画、星相、数术等等。广义上&#xff0…

UVA 10518 How Many Calls?

UVA_10518 这个题目想到f(n)f(n-1)f(n-2)1还是比较容易的&#xff0c;但如果能想到是f(n)2*F(n)-1就不太容易了&#xff0c;在看了UVA的论坛之后我才知道原来可以表示成这个样子&#xff0c;其中F(n)为斐波那契数&#xff0c;有了这个式子是第一步&#xff0c;后面的计算过程倒…

golang ide 环境搭建_Golang 入门 : 打造开发环境

工欲善其事&#xff0c;必先利其器&#xff01;在学习和使用 Golang 时如果有一款得心应手的 IDE&#xff0c;相信一定可以事半功倍。虽然很多 IDE 都提供了对 Golang 的支持&#xff0c;但真正好用的没几个。VSCode 算是不错的一个&#xff0c;但比起收费的 GoLand 还有些差距…

.NET 6 数组拷贝性能对比

本文来对比多个不同的方法进行数组拷贝&#xff0c;和测试其性能测试性能必须采用基准&#xff08;标准&#xff09;性能测试方法&#xff0c;否则测试结果不可信。在 dotnet 里面&#xff0c;可以采用 BenchmarkDotNet 进行性能测试。详细请看 C# 标准性能测试拷贝某个数组的从…

python win32ui选取文件夹_最全 Python 算法实现资源汇总!

整理 | Rachel责编 | Jane出品 | Python大本营(ID&#xff1a;pythonnews)【导语】数据结构与算法是所有人都要学习的基础课程&#xff0c;自己写算法的过程可以帮助我们更好地理解算法思路&#xff0c;不要轻视每一个算法&#xff0c;一些虽然看似容易&#xff0c;但可能有很多…

Openfiler + Redhat 5.4 Oracle 11gR2 RAC 安装文档

Oracle 11gR2 RAC 的安装。 这个实验采用的架构&#xff1a; 虚拟机VMServer 2.0 REDHAT 5.4 Oracle 11gR2openfiler存储 DNS server (scan)&#xff0c;openfiler通过iscsi 连接到虚拟机上&#xff0c;作为共享设备。 参考Oracle 官方文档&#xff1a; 在 Oracle Enterpris…

兄弟,就你这智商就别出轨了吧?

1 这智商就别出轨了吧&#xff08;没有聪明人就能出轨的意思&#xff09;▼2 “俗话说得好”上一句是什么&#xff1f;▼3 这是什么诡异的老年运动&#xff1f;▼4 搞不懂时尚趋势在哪里.....▼5 聚餐的时候千万别拿着包去厕所▼6 一看就会一学就废▼7 聪明的狗子能有多…

【CSS基础】实现 div 里的内容垂直水平居中

方案一&#xff1a; 所有内容垂直水平居中 兼容性&#xff1a;IE8。 条件&#xff1a;内容宽度和高度可以未知&#xff0c;可以是多行文字、图片、div。 描述&#xff1a;使用table-cell vertical-align &#xff0c; html代码见文末。 .centerDiv {width: 800px;height: 350p…

一些有意思的算法代码[转载]

转载自&#xff1a;http://coolshell.cn/articles/6010.html Keith Schwarz是一个斯坦福大学计算机科学系的讲师。他对编程充满了热情。他的主页上他自己正在实现各种各样的有意思的算法和数据结构&#xff0c;http://www.keithschwarz.com/interesting/&#xff0c; 目前这个网…

python web前端开发面试_面试前端,听听别人怎么说!

分享一个人的面试经验&#xff1a;一年半经验&#xff0c;百度、有赞、阿里面试总结前言人家都说&#xff0c;前端需要每年定期出来面面试&#xff0c;衡量一下自己当前的技术水平以及价值&#xff0c;本人17年7月份&#xff0c;毕业到现在都没出来试过&#xff0c;也没很想换工…

requestmapping注解访问404_【框架】127:几个非常重要的注解

今天是刘小爱自学Java的第127天。感谢你的观看&#xff0c;谢谢你。今天的知识点有点多&#xff0c;有点记不过来了。学习内容安排如下&#xff1a;使用注解优化昨天写的springMVC入门程序。映射路径各种风格的学习&#xff0c;也就对应了注解RequestMapping中的参数。各种类型…

Dapr + .NET Core实战(二) 服务调用

服务调用是什么在分布式应用程序中的服务之间进行调用会涉及到许多挑战。例如&#xff1a;维护其他服务的地址。如何安全地调用服务。在发生短暂的 暂时性错误 时如何处理重试。分布式应用程序调用链路追踪。服务调用构建块通过使用 Dapr 挎斗作为服务的 反向代理 来解决这些难…

华为新员工入职时信息安全保密手册

一、新员工入职信息安全须知 新员工入职后&#xff0c;在信息安全方面有哪些注意事项&#xff1f; 接受“信息安全与保密意识”培训&#xff1b; 每年应至少参加一次信息安全网上考试&#xff1b; 办理员工卡&#xff1b; 签署劳动合同&#xff08;含保密职责&#xff09;&…

第五周项目2-对象作为数据成员

回想Engineer类的数据成员&#xff0c;有眼镜、背包等。某Engineer的眼镜、背包&#xff0c;是Glass、Bag类的对象。类中的数据成员&#xff0c;其类型可以是简单类型&#xff0c;也可以是类。通过这种方式&#xff0c;将某些类组合到另外的类中&#xff0c;当作其中的一个“部…

谷歌排名第一的编程语言,死磕它这两点,小白也能学的会!不信你看!

全世界只有3.14 % 的人关注了爆炸吧知识谷歌排名第一的编程语言时什么&#xff1f;毫无疑问&#xff1a;肯定是 Python。也难怪&#xff0c;作为大数据时代和人工智能时代的必备语言&#xff0c;Python 的优点太多了&#xff0c;语言简洁、易学、开发效率高、可移植性强......另…