• python tornado(4)路由传参


    Tornado合集

    本文章使用的Tornado目录结构

    一、基础传参

    需要修改:

    1. application中的映射
    2. views/index中的接口

    1.1 application

    在路由映射中添加了字典,内部传递了两个参数。

    import tornado.web
    from views import index
    import config
    
    class Application(tornado.web.Application):
        def __init__(self):
            handlers = [
                (r'/',index.IndexHandler,{"userid":"1","username":"gtd"})
            ]
            # 调用父类Application,传递handlers,传递配置
            super(Application,self).__init__(handlers,**config.settings)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    1.2 views/index

    添加了def initialize(self,userid,username): 函数并接收两个参数。

    from tornado.web import RequestHandler
    
    # 业务处理类
    class IndexHandler(RequestHandler):
        # 传参,该方法会在HTTP方法前调用
        def initialize(self,userid,username):
            self.userid = userid
            self.username = username
    
        # 处理get请求
        def get(self,*args,**kwargs):
            print(self.username,self.userid)
            self.write("hello world")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    二、服务器传参

    2.1 提取url的特定部分

    2.1.1 在application中添加指定路由,在路由中做正则匹配.

    如下所示
    (r’/send_parameter/(\w+)/(\w+)',index.SendParameterUrlHandler)
    完整代码如下:

    import tornado.web
    from views import index
    import config
    
    class Application(tornado.web.Application):
        def __init__(self):
            handlers = [
                (r'/',index.IndexHandler,{"userid":"1","username":"gtd"}),
                # 将参数融入地址
                (r'/send_parameter/(\w+)/(\w+)',index.SendParameterUrlHandler)
            ]
            # 调用父类Application,传递handlers,传递配置
            super(Application,self).__init__(handlers,**config.settings)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.1.2还需要在index中添加对应接口

    # 从url中获取参数
    class SendParameterUrlHandler(RequestHandler):
        def get(self,name,id,*args,**kwargs):
            print(f"SendParameterUrlHandler : {name}--{id}")
            self.write("厉害")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    完整代码如下:

    from tornado.web import RequestHandler
    
    # 业务处理类
    class IndexHandler(RequestHandler):
        # 传参,该方法会在HTTP方法前调用
        def initialize(self,userid,username):
            self.userid = userid
            self.username = username
    
        # 处理get请求
        def get(self,*args,**kwargs):
            print("IndexHandler : ",self.username,self.userid)
            self.write("hello world")
    
    # 从url中获取参数
    class SendParameterUrlHandler(RequestHandler):
        def get(self,name,id,*args,**kwargs):
            print(f"SendParameterUrlHandler : {name}--{id}")
            self.write("厉害")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2.2 查询字符串(GET)

    2.2.1 在application中添加指定路由,如下所示。

    (r’/send_parameter_get’, index.SendParameterGetHandler)

    完整代码:

    import tornado.web
    from views import index
    import config
    
    class Application(tornado.web.Application):
        def __init__(self):
            handlers = [
                (r'/',index.IndexHandler,{"userid":"1","username":"gtd"}),
                # 将参数融入地址
                (r'/send_parameter/(\w+)/(\w+)',index.SendParameterUrlHandler),
                # get参数传递
                (r'/send_parameter_get', index.SendParameterGetHandler)
            ]
            # 调用父类Application,传递handlers,传递配置
            super(Application,self).__init__(handlers,**config.settings)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.2.2在index中编写对应接口,并接收参数

    # get参数获取
    class SendParameterGetHandler(RequestHandler):
        def get(self,*args,**kwargs):
            name = self.get_query_argument(name="name",default="NO NAME",strip=False)
            id = self.get_query_argument(name="id",default="NO ID",strip=True)
            print(f"SendParameterGetHandler : {name}--{id}")
            self.write("get参数获取")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    完整代码:

    from tornado.web import RequestHandler
    
    # 业务处理类
    class IndexHandler(RequestHandler):
        # 传参,该方法会在HTTP方法前调用
        def initialize(self,userid,username):
            self.userid = userid
            self.username = username
    
        # 处理get请求
        def get(self,*args,**kwargs):
            print("IndexHandler : ",self.username,self.userid)
            self.write("hello world")
    
    # 从url中获取参数
    class SendParameterUrlHandler(RequestHandler):
        def get(self,name,id,*args,**kwargs):
            print(f"SendParameterUrlHandler : {name}--{id}")
            self.write("url中参数获取")
    
    # get参数获取
    class SendParameterGetHandler(RequestHandler):
        def get(self,*args,**kwargs):
            name = self.get_query_argument(name="name",default="NO NAME",strip=False)
            id = self.get_query_argument(name="id",default="NO ID",strip=True)
            print(f"SendParameterGetHandler : {name}--{id}")
            self.write("get参数获取")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    2.3 请求体携带(POST)

    2.3.1 application编写路由

    (r’/send_parameter_post’, index.SendParameterPostHandler)

    2.3.2 ./templates/indx.html

    简单编写前端

    
    
    
        
        Title
    
    
        POST请求页面
    
    name: id:
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.3.3 index接口编写

    class SendParameterPostHandler(RequestHandler):
        # get请求
        def get(self,*args,**kwargs):
            # 返回页面
            self.render('index.html')
    
        def post(self,*args,**kwargs):
            name = self.get_body_argument("name",default="NO NAME")
            id = self.get_body_argument("id",default="NO NAME")
            print(f"SendParameterPostHandler : {name}--{id}")
            self.write("POST请求成功")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    种类并查集(反集),学习T宝代码
    [附源码]java毕业设计大学生评奖评优系统
    Spring Boot + EasyExcel导入导出,简直太好用了!
    jmeter采集ELK平台海量业务日志( 采用Scroll)
    「PAT乙级真题解析」Basic Level 1108 String复读机 (问题分析+完整步骤+伪代码描述+提交通过代码)
    腾讯T9纯手写基于Mycat中间件的分布式数据库架构笔记
    微信小程序Error: ENOENT: no such file
    ssm+vue的图书馆书库管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。
    bat脚本基础
    什么是分布式软件系统
  • 原文地址:https://blog.csdn.net/gtd54789/article/details/126028150