tornado(二)-----Handler Url正则

#tornado(二)-----Handler Url正则

handler url正则匹配, get/post

###1. 简单

	application = tornado.web.Application([
        (r'/', MainHandler)
    ], **settings) 

###2. 带有参数

    class ProfileHandler(RequestHandler):
            def initialize(self, database):
                self.database = database

            def get(self, username):
            	print username

        app = Application([
            (r'/user/(.*)', ProfileHandler, dict(database=database)),
            ])

这段代码来至tornado.web.RequestHandler的initialize的注释中,上面的(.*)就是用来匹配 get方法中的参数,如: 第一个(.*) 匹配 username; 那如果想要get有多个参数:如get(self, username, password); 那么配置r'/user/(.*)/(.*)'就可以了第二(.*)正则匹配组的值;列举几个例子吧:

如下:

url: localhost:9002/user/
hander_parse: (r'/user/', ProfileHandler)
get(self):

-------------------------------------------
url:localhost:9002/user/username/password
hander_parse: (r'/user/(.*)/(.*)', ProfileHandler)#这里主要正则匹配url,
get(self, username, password):
	print username, '  ', password

-------------------------------------------
url:localhost:9002/user/username_password
hander_parse: (r'/user/(.*)_(.*)', ProfileHandler)
get(self, username, password):
	print username, '  ', password

那如果像在url中传递很多的参数的时候,这样写get方法不会就有很多参数???所以还有一种简单的方法

get(self, *args):
	print str(args)

所以上面说了那么多的废话,以后就都用这种吧;

###3. 理解正则匹配的过程

在Application中debug,就可以查看tornado.web.py的源码. 从:

(r'/profile/(.*)', ProfileHandler, dict(database="mysql"))

----> 转化成

URLSpec(r'/profile/(.*)', ProfileHandler, dict(database="mysql"))
# 会把所有的URLSpec放到self.handlers 中

然后RequestHandler的子类会

kwargs={'database': 'mysql'} 

--->

调用 RequestHandler.initialize(**kwargs)

所以当有dict(database=database)

(r'/user/(.*)', ProfileHandler, dict(database=database)),

的时候就可以有:

def initialize(self, database):
	self.database = database

转载于:https://my.oschina.net/jiemachina/blog/204878

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值