【tornado】6.tornado.web.RequestHandler提取参数

1.通过正则表达式获得参数

路由参数匹配就是在URL里面输入特定的参数,然后这些参数可以被服务器捕捉到来使用。

首先添加路由元祖信息:
from views.index import IndexHandler,HomeHandler,ParameterMatchHandler
import tornado.web
import config

class Application(tornado.web.Application):
    def __init__(self):
        handlers=[
            (r'/',IndexHandler),
            (r'/home',HomeHandler),
            (r'/parametermatch/(\w+)/(\w+)/(\w+)',ParameterMatchHandler)

        ]
        super(Application,self).__init__(handlers,**config.settings)

核心代码是:

(r'/parametermatch/(\w+)/(\w+)/(\w+)',ParameterMatchHandler)

利用正则表达式来实现路由的匹配。这里(\w+)表示任意长度的字母数字和下划线的组合。
只要传入3个参数,这3个参数就能被服务器捕获到并使用

然后编写一下ParameterMatch类:
from tornado.web import RequestHandler
import config
import os

class IndexHandler(RequestHandler):
    def get(self):
        self.write("test:root page")

class HomeHandler(RequestHandler):
    def get(self):
        self.write("test:Home")

class ParameterMatchHandler(RequestHandler):
    def get(self,parameter1,parameter2,parameter3,*args,**kwargs):
        print(parameter1+"-"+parameter2+"-"+parameter3)
        self.write("parameter match test")

核心部分是这一段:

class ParameterMatchHandler(RequestHandler):
    def get(self,parameter1,parameter2,parameter3,*args,**kwargs):
        print(parameter1+"-"+parameter2+"-"+parameter3)
        self.write("parameter match test")

将浏览器中输入的3个参数分别赋给parameter1、parameter2和parameter3
在服务器终端输出3个参数的值后,在浏览器中显示信息:parameter match test

运行结果:

在浏览器中输入:localhost:8888/parametermatch/word1/word2/word3 后显示:
在这里插入图片描述



2.通过get_query_argument方法获得参数:

首先在application.py文件中添加路由信息:
from views.index import IndexHandler,HomeHandler,GetParameterHandler
import tornado.web
import config

class Application(tornado.web.Application):
    def __init__(self):
        handlers=[
            (r'/',IndexHandler),
            (r'/home',HomeHandler),
            (r'/getparameter',GetParameterHandler)
        ]
        super(Application,self).__init__(handlers,**config.settings)
然后编写一下GetParameterHandler的页面类:
from tornado.web import RequestHandler
import config
import os

class IndexHandler(RequestHandler):
    def get(self):
        self.write("test:root page")

class HomeHandler(RequestHandler):
    def get(self):
        self.write("test:Home")

class GetParameterHandler(RequestHandler):
    def get(self, *args, **kwargs):
        a = self.get_query_argument("a")
        b = self.get_query_argument("b")
        c = self.get_query_argument("c")
        print(a,b,c)
        self.write("get URL imformation by function get")

主要的部分是下面这段:

class GetParameterHandler(RequestHandler):
    def get(self, *args, **kwargs):
        a = self.get_query_argument("a",default=100,strip=True)
        b = self.get_query_argument("b",default=200,strip=True)
        c = self.get_query_argument("c",default=300,strip=True)
        print(a,b,c)
        self.write("get URL imformation by function get")
  • 首先URL地址会传入3个参数,然后我们将参数的值赋给a,b和c
  • default参数用于设置参数的默认值,如果URL地址中没有定义参数的值就使用默认值
  • strip表示在提取URL参数时是否去掉参数两边的留白
运行结果:

在浏览器中输入:localhost:6578/getparameter?a=10&b=20&c=30
后,显示为:
在这里插入图片描述
同时服务器终端输出:
在这里插入图片描述


在浏览器中输入:localhost:6578/getparameter?a=10&c=30 后,浏览器显示:

同时在服务器终端显示:
在这里插入图片描述
由于第二次输入时没有定义b的值,故b的值是使用默认值200

  • get_query_argument()方法还有get_query_arguments()的形式,后者定义的变量可以有多个值


3.通过post方法获得参数

添加postfile的路由信息:
from views.index import IndexHandler,HomeHandler,PostFileHandler
import tornado.web
import config

class Application(tornado.web.Application):
    def __init__(self):
        handlers=[
            (r'/',IndexHandler),
            (r'/home',HomeHandler),
            (r'/postfile',PostFileHandler)
        ]
        super(Application,self).__init__(handlers,**config.settings)

补充一下配置文件config.py:
import os
BASE_DIR=os.path.dirname(__file__)

# 参数
options={
    "port":6578
}

# 配置
settings={
    "debug":False,
    "static_path":os.path.join(BASE_DIR,"static"),
    "template_path":os.path.join(BASE_DIR,"templates")
}

因为我们的页面模板在templates文件夹中,故需要将templates的路径添加到配置文件中,这样后面代码就可以直接使用templates中的文件了。


编写index.py页面代码:
from tornado.web import RequestHandler
import templates
import config
import os

class IndexHandler(RequestHandler):
    def get(self):
        self.write("test:root page")

class HomeHandler(RequestHandler):
    def get(self):
        self.write("test:Home")

class PostFileHandler(RequestHandler):
    def get(self, *args, **kwargs):
        self.render('postfile.html')

    def post(self):
        name=self.get_body_argument("username")
        pwd = self.get_body_argument("pwd")
        hobbyList=self.get_body_arguments("hobby")
        print(name,pwd,hobbyList)
        self.write("post file test")

主要部分是:

class PostFileHandler(RequestHandler):
    def get(self, *args, **kwargs):
        self.render('postfile.html')

    def post(self):
        name=self.get_body_argument("username")
        pwd = self.get_body_argument("pwd")
        hobbyList=self.get_body_arguments("hobby")
        print(name,pwd,hobbyList)
        self.write("post file test")
  • 我们的服务器会在浏览器中显示一个html页面用于获取用户的信息(self.render(‘postfile.html’))
  • 通过get_body_argument方法将获得的值(“username”,“pwd”,“hobby”)对应到本地参数(name,pwd,hobbyList)中去
  • print(name,pwd,hobbyList)会在服务器本地打印出我们获得的参数值
  • self.write(“post file test”)会在浏览器中显示信息:post file test

运行结果:

在浏览器中输入:http://localhost:6578/postfile,显示的页面:

同时在服务器本地中显示:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值