2.tornado环境搭建及基本框架搭建——熟悉的hello world
目录:
- 1.项目环境搭建
- 2.tornado项目基本框架搭建
-
- ①熟悉的hello world
- 3.本项目基本框架的搭建
-
- ①编写tornado运行文件(app.py):
- ②创建handlers包,其内创建main.py文件编写业务逻辑:
- ③创建模板文件(templates文件夹里):
- ④创建static文件用于存放js和css
- ⑤运行项目:
- tornado官方文档:
官方英文文档
中文4.3
1.项目环境搭建
为了模拟真实工作中项目开发,本专栏项目开发也是采用本地pycharm连接远程虚拟机的方式进行开发。环境搭建步同django项目环境搭建步骤一样(换汤不换药,之前很详细的讲过了):《2.一步一步教你使用pycharm运行起第一个Django项目》
- 虚拟机中创建本项目运行的python虚拟环境(指定python版本为python3)
ubuntu命令:
mkvirtualenv -p python3 tudo
- 安装tornado库(指定版本为5.1.1)
ubuntu命令:
pip install tornado==5.1.1
- ubuntu查看安装包命令:
pip list
2.tornado项目基本框架搭建
①熟悉的hello world
- 代码(hello.py):
# -*- coding: utf-8 -*-"""__author__ = 孤寒者"""# 运行tornado的库import tornado.ioloopimport tornado.web# HTTP请求处理 类似Django里的类视图class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world")# 定义接口application = tornado.web.Application( [(r'/',MainHandler)])if __name__ == '__main__': # 定义端口 application.listen(8080) # 运行tornado tornado.ioloop.IOLoop.current().start()
- 运行上面的py文件后浏览器访问指定端口(127.0.0.1:8080)出现如下响应即为测试成功——可以进行项目开发!
3.本项目基本框架的搭建
①编写tornado运行文件(app.py):
- 如果所有代码都像测试代码那样写一起,会造成一个py文件过大的后果——同时包含定义接口及类视图等所有代码,而且不易区分具体代码块的功能(当然,如果你非要那样做也不是不可以,tornado就是这么随意~);
- 所以,现采用另一种写法——继承并重写定义接口的类tornado.web.Application,使得定义接口与类视图分开编写!!!
# -*- coding: utf-8 -*-"""__author__ = 孤寒者"""import tornado.ioloopimport tornado.webimport tornado.optionsfrom tornado.options import define,options# 导入请求处理类文件from handlers import main# 名字,默认端口,帮助信息,类型define('port',default='8000',help='Listeningport',type=int)# 重写class Application(tornado.web.Application): def __init__(self): handlers = [ ('/',main.IndexHandler), ('/explore',main.ExploreHandler), # 定义一个可以传参的接口 ('/post/(?P[0-9]+)',main.PostHandler), ] settings = dict( debug=True, # 配置模板路径 template_path='templates', # 配置静态文件路径 static_path='static' ) # 继承父类 super().__init__(handlers, settings)application = Application()if __name__ == '__main__': # 控制台打印访问记录 tornado.options.parse_command_line() # 端口 application.listen(options.port) print('Server start on port {}'.format(options.port)) tornado.ioloop.IOLoop.current().start()
②创建handlers包,其内创建main.py文件编写业务逻辑:
# -*- coding: utf-8 -*-"""__author__ = 孤寒者"""import tornado.webclass IndexHandler(tornado.web.RequestHandler): def get(self, *args, kwargs): self.render('index.html')class ExploreHandler(tornado.web.RequestHandler): def get(self, *args, kwargs): self.render('explore.html')class PostHandler(tornado.web.RequestHandler): def get(self, post_id): # 传递参数到post.html self.render('post.html',post_id=post_id)
③创建模板文件(templates文件夹里):
- 父模板——用于模板继承(base.html):
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>{% block title %}Tornado Title{% end %}</title></head><body>{% block content %}Default body of base {% end %}</body></html>
- 首页(index.html):
{% extends 'base.html' %}{% block title %} index page{% end %}{% block content %}I am index{% end %}
- 发现页(explore.html):
{% extends 'base.html'%}{% block title %}explore page{% end %}{% block content %}I am explore{% end %}
- 详情页(post.html):【展示接收到的参数post_id
{% extends 'base.html' %}{% block title %} post page {% end %}{% block content %}I am post {{ post_id }}{% end %}