Tornado 学习小结
来源:互联网 发布:淘宝女士春装 编辑:程序博客网 时间:2024/06/14 20:24
这周熟悉了下tornado。照例,需要总结一下,只是我粗浅的理解。
因为学的潦草,而且未学计网,如果写的不对欢迎指正。
简单介绍下tornado: tornado是著名的高性能web服务器框架,它是非阻塞的,速度非常快。
作为一个曾经用C原生socket写了某个小游戏的服务器累瘫还总是出bug后的菜鸡,看到这个,当然是喜,出,望,外!
先推荐一本书:http://demo.pythoner.com/itt2zh/index.html。
这本书是入门小册子,内容易懂,不错的入门书(我还给图书馆荐购了……)
一、快速入门
首先,先来建立一个小demo吧:
import tornado.httpserverimport tornado.ioloopimport tornado.optionsimport tornado.webfrom tornado.options import define, optionsdefine("port", default=8000, help="run on the given port", type=int)class IndexHandler(tornado.web.RequestHandler): def get(self): greeting = self.get_argument('greeting', 'Hello') self.write(greeting + ', friendly user!')if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()前面四行不解释。
第七行,定义了端口是8000;help="xxx":如果你在命令行使用了--help选项,就会弹出这句话。
然后定义了一个类IndexHandler,它继承了
tornado.web.RequestHandler以后可以看到,基本每个tornado应用都继承这个类。
里面重写了get方法。
get_argument('greeting', 'Hello')get_argument是个重要的函数,它得到的是http方法的参数。第二个是默认参数。然后
self.write(greeting + ', friendly user!')是把内容写在网页里面。如果你在地址栏中写
localhost:8000
屏幕会显示:
Hello,friendly user!
如果你在地址栏中写
localhost:8000/?greeting = 'Hey'
屏幕会显示:
Hey, friendly user!
是吧,多么有意思!
main里面的:
第一句是让命令行能够解释你的那些options设置
第二句是创建了一个tornado的app应用!这是很关键的。
tornado.web.Applicationtornado的app都是这个类的实例!里面的参数handlers,记住它是一个列表,存储的是元组,元组第一个存放的是正则表达式,第二个是你自己写的继承tornado.web.RequestHanlder的hanlder。然后你的hanlder对应的网页,就能够在正则表达式决定的URL中显示了。如果要建立的APP有多类需要访问的网页,那么可以在handlers列表中添加更多的元组,一个元组对应一类网页。正则表达式和你网页最后的URL有关。比如例子中的"/",那就是localhost:8000/
如果写"/(\w+)",那就可以访问 localhost:8000/abc
如果写“/(\d+)”,那就可以访问 localhost:8000/1321414525
第三句是创建tornado服务器的实例,然后第四句开始监听,最后一句是事件循环。
二、tornado与模板
一般web开发,都有两个文件夹,一个是static,还有一个是template,前者存放的是网页中一些静态的文件,比如图片,文档,或者是css,后者是网页的模板。
tornado实现模板渲染是render函数实现的,看一个例子:
import os.pathimport tornado.httpserverimport tornado.ioloopimport tornado.optionsimport tornado.webfrom tornado.options import define, optionsdefine("port", default=8000, help="run on the given port", type=int)class IndexHandler(tornado.web.RequestHandler): def get(self): self.render('index.html')class PoemPageHandler(tornado.web.RequestHandler): def post(self): noun1 = self.get_argument('noun1') noun2 = self.get_argument('noun2') verb = self.get_argument('verb') noun3 = self.get_argument('noun3') self.render('poem.html', roads=noun1, wood=noun2, made=verb, difference=noun3)if __name__ == '__main__': tornado.options.parse_command_line() app = tornado.web.Application( handlers=[(r'/', IndexHandler), (r'/poem', PoemPageHandler)], template_path=os.path.join(os.path.dirname(__file__), "templates") ) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
先看IndexHandler类,他没有参数,直接写render('index.html'),index.html里面的确没有参数,结果就是直接展示这个html,
注意PoemPageHandler类中,重写了post方法,post里面最后一句:self.render('poem.html', roads=noun1, wood=noun2, made=verb, difference=noun3)这是渲染了poem.html,后面是关键字参数。
下面看下html文件
Index.html
<!DOCTYPE html><html> <head><title>Poem Maker Pro</title></head> <body> <h1>Enter terms below.</h1> <form method="post" action="/poem"> <p>Plural noun<br><input type="text" name="noun1"></p> <p>Singular noun<br><input type="text" name="noun2"></p> <p>Verb (past tense)<br><input type="text" name="verb"></p> <p>Noun<br><input type="text" name="noun3"></p> <input type="submit"> </form> </body></html>poem.html
<!DOCTYPE html><html> <head><title>Poem Maker Pro</title></head> <body> <h1>Your poem</h1> <p>Two {{roads}} diverged in a {{wood}}, and I—<br>I took the one less travelled by,<br>And that has {{made}} all the {{difference}}.</p> </body></html>
在index.html里面有一个表单,意思是给/poem提供数据,post到/poem后,触发了PoemPage类的post方法,post方法接受表单数据,然后拆分,传给了poem.html进行渲染,然后显示它!
这是简单的一个模板例子。模板还能包含语句和块,限于能力不展开了……
三、tornado与Mongodb
服务器当然要和数据库连接啦。mongodb我超,级,喜,欢!感觉非常自由。
python有pymongo与mongodb实现连接,所以可以用pymongo来进行数据库操作。
关于pymongo,推荐这个快速tutorial:http://api.mongodb.com/python/current/tutorial.html
我推荐的那本Introduction to tornado上面关于pymongo建立client的方法过时了,请参考tutorial。
书中讲了个从mongodb中先存一些单词和解释的文档,然后用tornado来建立这些URL然后访问,我觉得非常有意思。具体不多描述了,自己看书第四章。
四、异步
说实话这块没怎么看懂,不好写总结(谁让我这么菜呢
后记:感觉自己需要补充很多计网方面的知识啊,而且tornado是开源的,性能这么优秀,今后有机会会看看源码,加深对网络的理解。
- Tornado 学习小结
- Tornado 学习
- Tornado学习
- Tornado学习
- Tornado学习
- tornado学习笔记:wtforms-tornado简单介绍
- Tornado学习笔记(一)【tornado的优势】
- Tornado 学习笔记
- 学习tornado -- 异步
- 学习tornado:介绍
- 学习tornado:模板
- 学习tornado:安全
- 学习tornado:异步
- Tornado异步学习
- 学习tornado:异步
- tornado websocket 学习历程
- tornado 学习之路
- tornado学习精要
- 中兴发布国民指纹手机 腾讯电脑管家新鲜开约
- 不起眼的foream便利贴相机 为何领跑众筹数据?
- 传金立超级续航M5 Plus将搭载 6.0英寸全高清AMOLED奥魔丽大屏
- 括号序列的判断
- 每日产品辣评:史上最快换代机型,华为畅享5发布两个月即迎来畅享5s
- Tornado 学习小结
- 读完这篇文章,你就不会再问“APP海外推广怎么开始”
- 打造一款好手机 360°全面解析OPPO A53
- hive 正则表达式详解
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) D
- 记录Studio 初始上传项目的步骤
- 命令模式
- 软件工程(C编码实践篇) 第七次作业实验报告
- 数据库常用语法详解