目录:
每篇前言:
🏆🏆作者介绍:【孤寒者】—优快云全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、优快云原力计划作者
- 🔥🔥本文已收录于tornado框架从入门到实战专栏:《tornado框架从入门到实战》
- 🔥🔥热门专栏推荐:《Python全栈系列教程》 | 《爬虫从入门到精通系列教程》 | 《爬虫进阶+实战系列教程》 | 《Scrapy框架从入门到实战》 | 《Flask框架从入门到实战》 | 《Django框架从入门到实战》 | 《Tornado框架从入门到实战》 | 《爬虫必备前端技术栈》
- 🎉🎉订阅专栏后可私聊进一千多人Python全栈交流群(手把手教学,问题解答);进群可领取Python全栈教程视频 + 多得数不过来的计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
- 🚀🚀加入我【博主V信:GuHanZheCoder】一起学习进步,一个人可以走的很快,一群人才能走的更远!
👇 👉 🚔文末扫码关注本人公众号~🚔 👈☝️
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.ioloop
import 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.ioloop
import tornado.web
import tornado.options
from 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<post_id>[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.web
class 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 %}
④创建static文件用于存放js和css
⑤运行项目:
🌟 解决问题,拓展人脉,共同成长!(非诚勿扰)