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

posted @ 2021-08-04 15:17  南风丶轻语  阅读(896)  评论(0编辑  收藏  举报