1.环境以及tornado安装
创建虚拟环境
安装tornado。具体实现步骤参考django安装步骤
2.路由与tornado的启动
# 实现一个最简单的tornado服务
import tornado.ioloop #监听循环
import tornado.web #tornado包核心模块
import tornado.httpserver #非阻塞服务器
import tornado.options #
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write('hello world')
application = tornado.web.Application(
handlers=[
(r'/',MainHandler), #路由表
]
#列表,列表中包含元组。配置路径信息
) #实例化操作
#可以传入很多参数
#配置参数项
if __name__ == '__main__': #用来做测试,自己调用
tornado.options.parse_command_line() #打印请求信息(日志信息),不加这一行后端不会有日志信息
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8080) #监听,绑定端口,服务器由主动变为被动
tornado.ioloop.IOLoop.current().start() #开启监听循环
#单进程单线程epoll
#epoll ,主动监听,把监听的任务交给操作系统,不断询问。监听循环
后端对应的日志信息:
指定端口访问
运行时如果不指定端口,就有默认端口,如果想指定端口使用已指定的端口
# 实现一个最简单的tornado服务 import tornado.ioloop #监听循环 import tornado.web #tornado包核心模块 import tornado.httpserver #非阻塞服务器 import tornado.options from tornado.options import define,options #指定端口传参 define('port',default=8080,help='run server port',type=int) class MainHandler(tornado.web.RequestHandler): def get(self): self.write('hello world') application = tornado.web.Application( handlers=[ (r'/',MainHandler), #路由表 ] ) if __name__ == '__main__': #用来做测试,自己调用 tornado.options.parse_command_line() #打印请求信息(日志信息),不加这一行后端不会有日志信息 http_server = tornado.httpserver.HTTPServer(application) http_server.listen(options.port) #监听,绑定端口,服务器由主动变为被动 tornado.ioloop.IOLoop.current().start() #开启监听循环 #单进程单线程epoll #epoll ,主动监听,把监听的任务交给操作系统,不断询问。监听循环
访问方式:
(tornado_pro) pyvip@Vip:~/tornado_pro$ python 01-test.py --port=8000
[I 190326 23:57:26 web:2246] 200 GET / (10.0.2.2) 1.88ms
[W 190326 23:57:27 web:2246] 404 GET /favicon.ico (10.0.2.2) 0.82ms
访问结果如下:(访问不通时,看是否做了端口映射)
报错解释:
拒绝访问:暂停访问,服务未启动
Not Found:找不到页面,可以访问
输入输出:
输出:write
输入: http://127.0.0.1:8080/index?name=%20aaa
get请求:url ?key=value&key1=value1
post请求:form表单中获取。
class MainHandler(tornado.web.RequestHandler): def get(self): self.write('hello world') #向浏览器输出内容 self.write('<br/>') # 页面解析html代码 self.write('n') # 页面不能解析linux代码,需要向浏览器输出必须使用浏览器能够解析的代码 self.write('hello world') class IndexHandler(tornado.web.RequestHandler): def get(self): name = self.get_argument('name','no') #获取页面传递过来的参数(获取输入信息) self.write(name+' hello ') application = tornado.web.Application( handlers=[ (r'/', MainHandler), # 路由表 (r'/index', IndexHandler), ]
请求结果如下:
讨论:get_argument与get_arguments的异同: