Skip to main content
 首页 » 编程设计

python之如何在 Tornado 请求处理程序中访问我的部分 url/路径

2025年05月04日30lonelyxmas

如果这个问题看起来很基础,我很抱歉,但我不知道如何用谷歌搜索我想要的东西,所以需要一些解释。

我正在使用 tornado对于我的服务器/路由。这是我正在尝试做的事情。

http = tornado.web.Application([ 
    (r"/myroute/*", request_handlers.MyHandler, {}), 
    (r"/",  request_handlers.defaultHandler, {}), 
], **settings) 
http.listen(port) 

所以解释一下,每当调用以“/myroute/”开头的路由时,紧跟在第二个斜杠之后的任何内容都将被解释为所需的路径的第二部分。该值可以为空字符串。

一些我需要能够解析的路径示例...

"/myroute/?var1=foo&var2=bar"    ## the required portion is empty string 
"/myroute/something?var1=foo"     ## the required portion is "something" 
"/myroute/something"             ## same, without options 

现在在我的请求处理程序中,我可以很容易地访问我的选项。

class MyHandler(tornado.web.RequestHandler): 
 
    def get(self, *args, **kwargs): 
        var1 = self.get_argument('var1') 
        print var1       ## 'foo' 
        var2 = self.get_argument('var2') 
        print var2       ## 'bar' 

基本上,几个问题。

1) 但是,如果我们坚持使用我的示例,我将如何访问路径的“某物”部分?

2) 对于我正在寻找的内容,是否有更好的术语?如果我只知道要搜索什么,我毫不怀疑这是可以用谷歌搜索的。

请您参考如下方法:

当您向应用程序添加处理程序时,您可以指定匹配(正则表达式)的路由:

import tornado.httpserver 
import tornado.ioloop 
import tornado.web 
 
 
class SomeHandler(tornado.web.RequestHandler): 
 
    def get(self, matched_part=None): 
        # if route won't match we set param to None 
 
        # different request params that my be handy for you   
        print('Host: %s' % self.request.host) 
        print('Entire uri: %s' % self.request.uri) 
        print('Uri path: %s' % self.request.path) 
        print('Query path w/o ?: %s' % self.request.query) 
 
        if matched_part is None: 
            print('Nothing matched') 
        else: 
            print('Matched part %s' % matched_part) 
 
if __name__ == "__main__": 
    application = tornado.web.Application([ 
        # match everything, but query part, after /myroute/ e.g. 
        # /myroute/ => None 
        # /myroute/test => test 
        # /myroute/test/aaa => test/aaa 
        # /myroute/test?ss=324 => test             
        ("^\/myroute\/(.+)$", SomeHandler), 
        ("/.*", SomeHandler), 
    ]) 
    http_server = tornado.httpserver.HTTPServer(application) 
    http_server.listen(8888) 
    tornado.ioloop.IOLoop.current().start()