Python tornado 之 启动服务与获取参数(包括地址栏参数和给定的参数)
1、介绍
tornado是python的一个web服务框架,是一个异步框架,是一个轻量级的框架。
2、安装
python -m pip install tornado
3、第一个简单的web项目
命名demo.py
import tornado.httpserver import tornado.ioloop import tornado.web from tornado.options import define from tornado.options import options class BaseHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): name = self.get_argument('name', '未传入姓名', True) # 获取前端参数name,未传就是"未传入姓名",去除前后空格 response = """<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Title</title> </head> <body> <h1>我是一级标题</h1> <h2>您好!{}!</h2> </body> </html>""".format(name) self.write(response) # 返回给前端 if __name__ == '__main__': define('port', default=8080, help='设置启动服务的端口', type=int) # 定义端口, 可以全局使用options.port获取,可通过命令行更改 options.parse_command_line() # 分析命令行参数 application = tornado.web.Application(handlers=[('/', BaseHandler)]) # 设置路由 server = tornado.httpserver.HTTPServer(application) server.listen(options.port) # 监听端口8080,可以通过命令行改变,python xxx.py --port=8090 tornado.ioloop.IOLoop.instance().start() # 启动web服务 """ # 上面的可以简写成这样子 define('port', default=8080, help='设置启动服务的端口', type=int) # 定义端口, 可以全局使用options.port获取,可通过命令行更改 options.parse_command_line() # 分析命令行参数 application = tornado.web.Application(handlers=[('/', BaseHandler)]) # 设置路由 application.listen(options.port) # 监听端口8080,可以通过命令行改变,python xxx.py --port=8090 tornado.ioloop.IOLoop.current().start() # 启动web服务 """
代码层面解析
定义一个类继承RequestHandler,重写get | post等方法,即访问时,就执行对应请求的方法。即,如果前端访问方式为GET,则执行的函数就是get,访问方式是POST,则访问的方法就是post(demo.py未写post方法,未写该请求方法时,使用post请求就会报出405)
运行
如果运行命令是 python3 demo.py
访问 http://127.0.0.1:8080/
访问 http://127.0.0.1:8080/?name=%E5%A2%A8%E7%8E%89%E9%BA%92%E9%BA%9F
可以运行 python demo.py --port=8090 来更改端口号,这时候就访问 http://127.0.0.1:8090/ 即可
可以运行 python demo.py --help 来查看帮助信息
4、接收地址栏参数
例如访问 http://127.0.0.1:8080/a/b 获取a或者b作为参数
命名 demo.py
import tornado.ioloop import tornado.web from tornado.options import define from tornado.options import options class BaseHandler(tornado.web.RequestHandler): def get(self, first_argv): name = first_argv # 第一个匹配的路径字符串 response = """<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Title</title> </head> <body> <h1>我是一级标题</h1> <h2>您好!{}!</h2> </body> </html>""".format(name) self.write(response) class TestHandler(tornado.web.RequestHandler): def get(self): response = """<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Title</title> </head> <body> <h1>测试第二个路由</h1> </body> </html>""" self.write(response) if __name__ == '__main__': define('port', default=8080, help='设置启动服务的端口', type=int) # 定义端口, 可以全局使用options.port获取,可通过命令行更改 options.parse_command_line() # 分析命令行参数 application = tornado.web.Application(handlers=[('/(\d+)', BaseHandler), ('/test', TestHandler)]) # 设置路由 """ ('/(\d+)', BaseHandler) 表示访问"/"后面加一个或多个数字,可以匹配到BaseHandler 访问 http://127.0.0.1:8080/ 会出现404,因为这里是正则匹配,需要匹配"/"后面跟一个或多个数字 比如 http://127.0.0.1:8080/111 或 http://127.0.0.1:8080/888 括号中的匹配上的字符串,会传入给第一个参数 first_argv """ """ ('/test',TestHandler) 表示访问"/test",可以访问到TestHandler 访问 http://127.0.0.1:8080/test """ application.listen(options.port) # 监听端口8080,可以通过命令行改变,python xxx.py --port=8090 tornado.ioloop.IOLoop.current().start() # 启动web服务
运行 python demo.py
访问 http://127.0.0.1:8080/ 出现 404 因为路由定义了需要后面加一个或多个数字
访问 http://127.0.0.1:8080/111
访问 http://127.0.0.1:8080/888
访问 http://127.0.0.1:8080/test
学习链接 http://doc.iplaypy.com/tornado/ch1.html