python webapp2嵌套路径prefixrou

2024-04-26 05:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种(简单的)方法来构建webapp2的url,这种方法允许下面这样的结构?我找不到从父级传递PathPrefixRoute的方法,但是类似PathPrefixRoute('(/v1)', [PathPrefixRoute('$1/app1',的方法会很酷。你知道吗

urls = [
    PathPrefixRoute('/v1', [
        PathPrefixRoute('/app1', [  
            # /v1/app1/index
            Route('/index', 'v1.app1.index.Main')
        ]),
        PathPrefixRoute('/app2', [  
            # /v1/app2/index
            Route('/index', 'v1.app2.index.Main')
        ])
    ]),
    PathPrefixRoute('/v2', [
        PathPrefixRoute('/app1', [
            # /v2/app1/index
            Route('/index', 'v2.app1.index.Main')
        ])
    ])
]

application = webapp2.WSGIApplication(routes=urls)

Tags: 方法urlindexapplicationmain结构urlsroute
1条回答
网友
1楼 · 发布于 2024-04-26 05:24:58

我最终在uwsgi上编写了自己的自定义服务器。我使用的路由机制我已经贴在下面了,但是完整的应用程序是318行,可以在基本的1核服务器上处理100个RPS(这是我测试的全部,但感觉它可以处理1000个RPS)。你知道吗

请随意评论好的,坏的和丑陋的想法。你知道吗

class Static:
    def __init__(self, s): self._s = s
    def __str__(self): return self._s

SITES = {
    '(127.0.0.1|localhost)': {
        '/': 'default.index.Home'
    },
    '(example.com)': {
        '/': 'example.index.Home',
        '/static': Static('example'),
        '/console': {
            '/': 'example.console.Home',
            '/login': 'example.console.Login'
        }
    }
}

def get_location(self):
    http_host = self.env.get('HTTP_HOST', '').split(':')[0]  # host:port
    if not http_host: raise HttpException(404, "Empty Site")
    path_info = self.env.get('PATH_INFO')
    if not path_info: raise HttpException(404, "Empty Path")
    for site in SITES:
        if re.match(site, http_host, re.I):
            paths = SITES[site]
            parts = path_info.split('/')[1:]  # first is always blank
            for part in parts:
                p = paths.copy()
                for path in p:
                    if re.match(path + '$', '/' + part, re.I):
                        if isinstance(p[path], basestring):
                            return p[path]
                        paths = p[path]
                        break
                    paths = None
                if not paths: break
            raise HttpException(404, "Unknown Path")
    raise HttpException(404, "Unknown Site")

相关问题 更多 >