python webapp2 嵌套 PathPrefixRoute
python webapp2 nested PathPrefixRoute
是否有一种(简单的)方法来为 webapp2 构建 url 以允许如下所示的结构?我看不到从父级传递 PathPrefixRoute 的方法,但是像 PathPrefixRoute('(/v1)', [PathPrefixRoute('/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)
我最终用 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")
是否有一种(简单的)方法来为 webapp2 构建 url 以允许如下所示的结构?我看不到从父级传递 PathPrefixRoute 的方法,但是像 PathPrefixRoute('(/v1)', [PathPrefixRoute('/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)
我最终用 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")