• tornado—–Handler Url正则


    转自:http://my.oschina.net/jiemachina/blog/204878

    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
  • 相关阅读:
    Android中通过intent打开浏览器到指定网页
    iOS真机调试
    Autodesk Infrastructure Modeler(AIM)冉冉升起的新星
    IKVM.NET_07_用户指南_IKVM.NET 字节码编译器(ikvmc.exe)
    我们——程序员应该关注,功能?设计?
    系统集成的困境
    系统服务_时间同步服务器
    ASP.NET_ASP.NET 缓存Cache
    IKVM.NET_第五篇_用户指南_安装
    IKVM.NET_第四篇_用户指南_概述
  • 原文地址:https://www.cnblogs.com/albzcj/p/4305237.html
Copyright © 2020-2023  润新知