Python 如何在tornado请求处理程序中访问我的url/路径的部分
对不起,如果这个问题看起来很基本,但我不知道如何谷歌我想要什么,所以需要一些解释 我正在为我的服务器/路由使用。以下是我试图做的Python 如何在tornado请求处理程序中访问我的url/路径的部分,python,parsing,routing,httprequest,tornado,Python,Parsing,Routing,Httprequest,Tornado,对不起,如果这个问题看起来很基本,但我不知道如何谷歌我想要什么,所以需要一些解释 我正在为我的服务器/路由使用。以下是我试图做的 http = tornado.web.Application([ (r"/myroute/*", request_handlers.MyHandler, {}), (r"/", request_handlers.defaultHandler, {}), ], **settings) http.listen(port) 为了解释这一点,每当调用以“/
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) 有没有更好的术语来描述我所寻找的?如果我只知道搜索什么,我毫不怀疑这是googleable。Tornado允许您使用
self.request.path
访问路径。然后可以将其拆分为路径组件
假设您的路径是/myroute/something
class MyHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
components = [x for x in self.request.path.split("/") if x]
# results in ['myroute', 'something']
将处理程序添加到应用程序时,可以指定带有匹配项的路由(正则表达式):
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()
谢谢你,我现在就用这个。你现在可以接受了,谢谢你的回复。当我读到这篇文章时,我已经实现了Jumbopp的响应,所以他/她最终接受了。这似乎更符合我所问的精神,所以我非常感谢你留下答案。当我重构时可能会回到这一点上。如果有人不明白为什么“匹配的部分”不会出现在tornado文档中。。。实际上它叫