当前位置: 首页 > news >正文

【2019-05-29】tornado简单使用笔记

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2019-05-29| 标题:tornado简单使用笔记分类:编程 / web / tornado |标签:python && jython·bootstrap·tornado


tornado简单使用笔记

    • tornado是什么
    • 安装方法
    • tornado简单DEMO
    • html页面输出方法
      • 使用python代码返回静态html页面
      • 使用python代码返回定制html页面
      • 使用tornado的render功能返回html页面
      • 和bootstrap一起使用

最近要用python来做一个WEB服务器,找来找去,感觉tornado上手比较简单,这里简单笔记下使用要点。

tornado是什么

Tornado是使用Python编写的一个强大的、可扩展的Web服务器。
入门文档:【http://shouce.jb51.net/tornado/index.html 】
官方文档:【 https://tornado-zh.readthedocs.io/zh/latest/index.html 】

安装方法

tornado是一个python组件,因此最简单方式就是pip安装。

#pip3 install tornado

tornado简单DEMO

根据入门文档,我们可以非常快速的实现一个WEB服务器,新建hello_tornado.py代码如下:

#!/usr/bin/python3# -*- coding: UTF-8 -*-importsysimportosimporttornado.httpserverimporttornado.ioloopimporttornado.optionsimporttornado.webfromtornado.templateimportTemplatedefhandler_list():return[(r"/hello_tornado",hello_tornado_handler_main),]classhello_tornado_handler_main(tornado.web.RequestHandler):defget(self):self.write("Rev Get Request:{}".format(self.request))if__name__=="__main__":app=tornado.web.Application(handlers=handler_list(),debug=True)http_server=tornado.httpserver.HTTPServer(app)http_server.listen(8000)tornado.ioloop.IOLoop.instance().start()

然后执行命令:

#python3 hello_tornado.py

我们访问http://127.0.0.1:8000/hello_tornado可以看到结果:

html页面输出方法

tornado有好几种方式可以输出html页面,这里简单笔记下。

使用python代码返回静态html页面

这种方式很简单,直接把html内容返回即可。

classhello_tornado_handler_main(tornado.web.RequestHandler):defget(self):self.write(""" <!DOCTYPE html> <html> <body>Hello world</body> </html> """)

显示如下:

使用python代码返回定制html页面

这种方式是利用tornado的template功能,来替换html中的字符串。

class hello_tornado_handler_main(tornado.web.RequestHandler): def get(self): content=Template("""<!DOCTYPE html><html><body>hello,{{name1}}and{{name2}}</body></html>""")self.write(content.generate(name1="LiLei",name2="HanMM"))

显示如下:

这两种方式都不是太友好,因为将html写入到代码中会耦合显示与业务,所以我们一般使用下面的这种方式。

使用tornado的render功能返回html页面

新建一个hello_tornado.html文件,内容如下:

<!DOCTYPEhtml><html><body>hello,{{name1}} and {{name2}}</body></html>

python代码为:

classhello_tornado_handler_main(tornado.web.RequestHandler):defget(self):self.render("htmls/hello_tornado.html",name1="LiLei",name2="HanMM")

文件结构:

├── hello_tornado.py ├── htmls │ ├── hello_tornado.html

显示如下:

和bootstrap一起使用

如果要和bootstrap同时使用,可以设置 static_path 变量。
hello_tornado.html内容:

<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1"><!-- Bootstrap --><link href="{{ static_url("bootstrap-3.3.7-dist/css/bootstrap.min.css") }}" rel="stylesheet"> <link href="{{ static_url("custom_css/ie10-viewport-bug-workaround.css") }}" rel="stylesheet"> <link href="{{ static_url("custom_css/navbar-fixed-top.css") }}" rel="stylesheet"></head><body><divclass="container"><divclass="panel panel-default"><divclass="panel-heading">children table</div><tableclass="table table-bordered"><tbody><tr><th>name</th><th>info</th></tr>{% for child_info in children_infos %}<tr><td>{{child_info[0]}}</td><td>{{child_info[1]}}</td></tr>{% end %}</tbody></table></div></div><script src="{{ static_url("jquery/1.12.4/jquery.min.js") }}"></script><script src="{{ static_url("bootstrap-3.3.7-dist/js/bootstrap.min.js") }}"></script></body></html>

hello_tornado.py完整内容:

#!/usr/bin/python3# -*- coding: UTF-8 -*-importsysimportosimporttornado.httpserverimporttornado.ioloopimporttornado.optionsimporttornado.webfromtornado.templateimportTemplatedefhandler_list():return[(r"/hello_tornado",hello_tornado_handler_main),]classhello_tornado_handler_main(tornado.web.RequestHandler):defget(self):self.render("htmls/hello_tornado.html",children_infos=(("LiLei","boy"),("HanMM","girl")))if__name__=="__main__":app=tornado.web.Application(handlers=handler_list(),static_path=os.path.join(os.path.dirname(__file__),"htmls"),debug=True)http_server=tornado.httpserver.HTTPServer(app)http_server.listen(8000)tornado.ioloop.IOLoop.instance().start()

文件结构:

├── hello_tornado.py ├── htmls │ ├── bootstrap-3.3.7-dist │ │ ├── css │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.css.map │ │ │ ├── bootstrap.min.css │ │ │ ├── bootstrap.min.css.map │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap-theme.css.map │ │ │ ├── bootstrap-theme.min.css │ │ │ └── bootstrap-theme.min.css.map │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ └── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ └── npm.js │ ├── custom_css │ │ ├── ie10-viewport-bug-workaround.css │ │ └── navbar-fixed-top.css │ ├── hello_tornado.html │ ├── jquery └── 1.12.4 └── jquery.min.js

显示如下:

http://www.jsqmd.com/news/1237691/

相关文章:

  • 厦门市集美区亨得利**钟表服务中心电话公示(2026年7月最新) - 亨得利官方
  • 在线教育平台的 AI 代码生成实践:课件页面模板化与质量保障体系
  • 双语技术协作如何提升AI团队研发效率
  • 【Bug已解决】TPOTrainer.evaluate() returns NaN eval_loss while training loss is finite 解决方案
  • 2026年成都办公家具高性价比选购指南 - 谁都没有我好看
  • Java面试30天速成:高频考点、场景题与实战策略全解析
  • 用AI写出让领导眼前一亮的述职报告:5类高转化提示词模板+12个避坑雷区
  • 2026年7月最新芝柏福州高新万达广场维修保养服务电话 - 亨得利官方服务中心
  • Arm AGI CPU架构解析:专为代理式AI设计的数据中心处理器
  • STaR: Towards Cognitive Table Reasoning via Slow-Thinking Large Language Models
  • 企业家AI原生学习平台推荐:AI迭代一日千里,高参学堂直击行业前沿
  • 售楼处VR看房系统制作公司排名
  • 创建k8s
  • 2026年7月最新重庆九龙坡区谢家湾街道亨得利**钟表服务中心电话公示 - 亨得利官方博客
  • Qwen3.6-27B模型在5060Ti与V100显卡上的推理性能对比
  • AWS机器学习认证实战:SageMaker数据管道与模型监控深度解析
  • 论文答辩还有3天AI率超标怎么办?嘎嘎降AI半天搞定,亲测知网过了
  • 2026年全国5大工装铝建材厂家推荐!2026最新**出炉,佛山市乐霏建材有限公司优势突出 - 十大品牌榜
  • ABB机器人上位机开发:从算法封装到故障诊断实战
  • 深入Dev-C++:轻量级IDE的现代应用与高效调试技巧
  • 差分底盘运动学模型:机器人移动开发实用指南
  • 2026甄选:深耕智能制造的产教融合品牌机构——常州市新北区阿普未来职业技能培训学校有限公司 - 企业推荐官【官方】
  • 企业大脑:企业的认知基础设施
  • 哈尔滨铁艺铝艺大门定制厂家怎么选?多家实地对比测评,本地靠谱厂家深度推荐 - 专注室内空气检测治理
  • 2026 年 7 月**备案信息,百达翡丽**维修服务中心全国国内**售后地址 热线汇总 - 百达翡丽官方服务中心
  • 转:为何许多人都说,“不想活成父母的样子”?
  • 毕业设计 基于机器视觉的驾驶疲劳检测系统(源码+论文)
  • 线性代数在机器学习中的工程实践:从张量shape到SVD压缩
  • 芝柏中国**售后服务中心|全新热线及维修地址**信息公告(2026年7月更新) - 亨得利官方服务中心
  • Electron-OH 37.2.1版本升级与鸿蒙跨平台开发实战