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,显示的页面:
同时在服务器本地中显示: