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 @   南风丶轻语  阅读(972)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示