tornado从地址栏中获取参数,url路由解析


# tornado路由列表
# /python
# /python/day1
# /python/day1/basic
# 以上格式路径都交给PythonHandler来处理


import tornado
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, options, parse_config_file
from tornado.web import Application, RequestHandler, url


# 用来响应用户请求
class IndexHandler(RequestHandler):
    #响应以get方式发起的请求
    def get(self, *args, **kwargs):
        # 服务器给浏览器的响应内容
        self.write('<a href=/python>hello python</a>')
    #响应以post方式发起的请求
    def post(self, *args, **kwargs):
        pass

#用来响应用户/java请求
class JavaHandler(RequestHandler):
    #重写RequestHandler中initialize方法
    #获取动态设置的参数(greeting,info)
    def initialize(self,greeting,info):
        self.greeting = greeting
        self.info = info

    def get(self, *args, **kwargs):
        #write方法只能接受一个字符串类型的参数
        self.write(self.greeting+','+self.info)

    def post(self, *args, **kwargs):
        pass

#用来响应用户/python请求
class PythonHandler(RequestHandler):
	#其中**kwargs以字典的方式传参
    def get(self,*args, **kwargs):

        self.write('你好, 拍森')
        self.write('<br>')
        self.write('<a href=%s>Jump To Java</a>' % self.reverse_url('java_url'))#反向url解析,对应application中的路由
        self.write('<br>')

        day = kwargs.get('day',None)#get方式取值,没有的话不会报错
        title = kwargs.get('title',None)
		#测试是否有传入的参数
        if day:
            self.write('第几天: '+day)
        if title:
            self.write('课程内容:'+title)

    def post(self, *args, **kwargs):
        pass

#定义一个变量,用来代表端口号
define('port',type=int,default=8888,multiple=False)
#定义一个变量,用来代表数据库的连接信息(用户名,密码,端口号,数据库名称)
define('db',multiple=True,type=str,default=[])
#从指定的配置文件中,读取port的内容
parse_config_file('config')

#创建Application对象,进行若干个对服务器的设置
#例如:路由列表,模板路径,静态资源路径等



app = Application([('/',IndexHandler),
					#加上url之后,我们就可以为url设置一个name属性
                   url('/java',JavaHandler,{'greeting':'你好','info':'家蛙'},name='java_url'),
                   ('/python',PythonHandler),
				   #正则表达式实现模式匹配,加()后,tornado会自动提取括号中的内容,也可以为这个参数指定一个名字
                   ('/python/(?P<day>[a-zA-Z0-9]+)',PythonHandler),
                   ('/python/(?P<day>[a-zA-Z0-9]+)/(?P<title>[a-zA-Z]+)',PythonHandler)])
#创建服务器程序
server = HTTPServer(app)
#服务器监听某个端口(建议使用10000以上的端口)
server.listen(options.port)#10000
#打印获得的数据库参数
print('数据库参数:',options.db)
#启动服务器(在当前进程中启动服务器)
IOLoop.current().start()


猜你喜欢

转载自blog.csdn.net/qq_35810838/article/details/83997645