tornado之运行第一个tornado程序
Tornado是使用Python编写的一个强大的、可扩展的Web服务器。它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。
首先是安装tornado. tornado不支持windows。如果需要在windows下安装可以通过ActivePython的PyPM包管理器进行安装类似:pypm install tornado
在linux下安装就简单多了。pip install tornado就可以了
下面我们进入tornado的功能。首先来看一个基本的web应用,在给定的端口上监听请求,并在根目录”/”响应请求
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web from tornado.options import define,options
define("port",default=8000,help="run on the given port",type=int) class indexHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
greeting=self.get_argument('greeting','hello')
self.write(greeting+'tornado user') def server_function():
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", indexHandler),(r"/index",indexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port,address='127.0.0.1')
tornado.ioloop.IOLoop.instance().start()
在终端执行:
zhf@zhf-maple:~/py_prj$ python tornada_try.py
然后在浏览器输入http://localhost:8000/
此时在终端上可以看到对应的输出。
zhf@zhf-maple:~/py_prj$ python tornada_try.py
[I 171204 10:53:23 web:2063] 200 GET / (127.0.0.1) 0.49ms
[W 171204 10:53:23 web:2063] 404 GET /favicon.ico (127.0.0.1) 0.40ms
下面来介绍下上面应用的各个模块:
首先看下options功能。在运行代码的时候会设置端口和地址等参数。python自带有argparse模块进行参数解析。tornado中不需要调用argparse模块而是自带了options模块。下面是测试代码:
import tornado.options
from tornado.options import options
if __name__=="__main__":
tornado.options.parse_command_line()
print options.port
终端执行脚本:
zhf@zhf-maple:~/py_prj$ python tornada_try.py --port=8001
8001
如果加入了不存在的参数会报如下的错误
zhf@zhf-maple:~/py_prj$ python tornada_try.py --addr=127.0.0.1
tornado.options.Error: Unrecognized command line option: 'addr
也可以不带参数,通过define来设置默认参数。如下。port代表新增加的参数名称
default代表默认值,help代表帮助信息,当使用--help的时候会打印help的字段。type代表了前面新加参数的类型。
from tornado.options import define
define("port",default=9000,help="run on the given port",type=int)
from tornado.options import define
define("port",default=9000,help="run on the given port",type=int)
运行结果如下:
zhf@zhf-maple:~/py_prj$ python tornada_try.py
9000
zhf@zhf-maple:~/py_prj$ python tornada_try.py --help
tornada_try.py options:
--port run on the given port (default 9000)
IndexHandler:这个类继承于tornado.web.RequestHandler。每当网页发起一个请求的时候,Tornadah会调用这个类并将其实例化。然后调用HTTP请求所对应的方法。也就是get方法,这个处理函数将对HTTP的GET请求作出响应。
在get方法中调用了get_argument方法。这个函数的作用是增加参数greeting,并初始化为hello。在后面的write方法调用。
write方法:这个参数的作用是生成HTTP response的具体信息。在这里里面的参数是greeting+“tornado user”, 因此在网页中生成的信息是hellotornado user
Application: 这是tornado运转起来的语句,tornado.web.Application(handlers=[(r"/", IndexHandler)])创建了一个Application实例,传递给Application的__init__函数最重要的是参数是handler,也就是[(r"/", IndexHandler)]。 handler告诉tornado该 用哪个类来响应请求。
最后是服务器的启动:listen方法监听端口和地址。ioloop方法循环执行server监听功能。
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port,address='127.0.0.1')
tornado.ioloop.IOLoop.instance().start()
我们来具体看下handler参数的用法。这个handler参数是一元组组成的列表。其中元组第一个参数代表的是网页访问路径,第二个是该访问路径的触发实例
tornado.web.Application(handlers=[(r"/", indexHandler)]}
在前面的运行中,在网页中输入http://localhost:8000/可以得到打印的字符串。但是如果我们输入http://localhost:8000/index则会提示404:Not Found.提示找不到对应的网页。原因在于我们在handlers中并没有添加/index的处理方法。这就相当与django中的路由机制:
url(r'index/',views.index) /index对应的处理函数是views.index
那么如果我们要访问index这个网页路径,也需要在handers中添加对应的路由机制。这样当输入http://localhost:8000/index 也会调用indexHandler实例
tornado.web.Application(handlers=[(r"/", indexHandler),(r"/index",indexHandler)]
另外在indexHandler中我们只定义了get方法。在网页中传递数据有get和post两种方法。如果网页采用的是post的方法,那么同样的在indexHandler中需要定义post函数,用法和get函数是一样的。
tornado之运行第一个tornado程序的更多相关文章
- 运行第一个Hadoop程序,WordCount
系统: Ubuntu14.04 Hadoop版本: 2.7.2 参照http://www.cnblogs.com/taichu/p/5264185.html中的分享,来学习运行第一个hadoop程序. ...
- Spark认识&环境搭建&运行第一个Spark程序
摘要:Spark作为新一代大数据计算引擎,因为内存计算的特性,具有比hadoop更快的计算速度.这里总结下对Spark的认识.虚拟机Spark安装.Spark开发环境搭建及编写第一个scala程序.运 ...
- 运行第一个ruby程序
0x00 安装 首先需要安装一个ruby的环境,ruby分为win.linux.macOS版本.不用系统安装方法略有差异,不在这进行讲解. 0x01 运行第一个ruby程序 我这里是win环境,打开命 ...
- 运行第一个python程序,python 变量,常量,注释
一.运行第一个python程序: print('Hello,world') 保存为.py文件 在cmd窗口: python3x:python py文件路径 回车 python2x:python p ...
- OpenCV学习笔记(一)安装及运行第一个OpenCV程序
1.下载及安装 OpenCV是一套开源免费的图形库,主要有C/C++语言编写,官网: http://opencv.org/ .在 http://opencv.org/downloads.html 可以 ...
- 运行第一个Python程序
Python的三种运行方式 交互式解释器 在终端输入python3 进入python交互式解释器 输入exit()退出交互式解释器 命令行脚本 创建python脚本 通过命令执行程序 python h ...
- 使用Eclipse运行第一个Go程序
Windows 10家庭中文版,go version go1.11 windows/amd64, Eclipse IDE for C/C++ Developers Photon Release (4. ...
- [IOS]从零开始搭建基于Xcode7的IOS开发环境和免开发者帐号真机调试运行第一个IOS程序HelloWorld
首先这篇文章比较长,若想了解Xcode7的免开发者帐号真机调试运行IOS程序的话,直接转到第五部分. 转载请注明原文地址:http://www.cnblogs.com/litou/p/4843772. ...
- 编译运行第一个Java程序——通过示例学习Java编程3
作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=13 在本教程中,我们将了解如何编写.编译和运行Ja ...
随机推荐
- pexpect模块
pexpect用来启动子程序,使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的python模块,当然我们可以使用他来做ssh登陆,ssh模块登陆还有一个基于python实现远程连接,用于s ...
- C++对象
- 证书锁定Certificate Pinning技术
证书锁定Certificate Pinning技术 在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信.攻击机以自己的证书替代服务器发给客户端的证书.通常,客户端不会验证该证书,直接接受该证 ...
- OpenLDAP给我的启发
首先这篇文章没什么技术性,但亮点是:我会给广大运维同行提一点建议,这个一点仅仅是一点,而不是很多点. 年前计划深度掌握一些诸如:Jenkins.Gitlab.ELK.k8s等的软件,但学着学着总是想学 ...
- JDK1.8和Spring 3.2.0 的坑
上午 org.apache.catalina.core.StandardContext listenerStart严重: Exception sending context initialized e ...
- Neural Networks and Deep Learning学习笔记ch1 - 神经网络
近期開始看一些深度学习的资料.想学习一下深度学习的基础知识.找到了一个比較好的tutorial,Neural Networks and Deep Learning,认真看完了之后觉得收获还是非常多的. ...
- Android二维码工具zxing使用
二维码在我们生活中随处可见.在我眼里简直能够用"泛滥"来形容啦.那怎样在我们Android项目中扫描识别二维码或生成二维码图片呢? 我们通常使用的开源框架是zxing.在githu ...
- Git以及github的使用方法(三),git status查看工作区的状态,git diff查看具体修改内容
我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容: Git is a distributed version c ...
- log4j:WARN Please initialize the log4j system properly解决的方法
要解决问题很easy,建立LOG4J 的配置文件就可以. 在src 文件夹下创建配置文件,选 一.择菜单File > New > File,文件名称输入log4j.properties,文 ...
- vue-router钩子beforeRouteEnter函数获取到this实例
官方文档: const Foo = { template: `...`, beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 ...