如何在 Twisted 框架中获取两个路径变量?
How to take two path variable in Twisted framework?
我想要两个路径变量。 url 模式如下所示:
http://<host>:<port>/<path_var_1>/<path_var_2>
其中 path_var_1 & path_var_2 是动态的。我可以按照指示服用一个 here 但我怎样才能服用两个或更多?
使用 Twisted Web 的资源抽象(txThings 资源抽象似乎建立在其上)使用多个路径段的一种惯用方法是拥有多个资源。对应于路径前面部分的资源收集状态并将其传递给对应于路径后面部分的资源。
例如
from twisted.web.resource import Resource
class Root(Resource):
def getChild(self, name, request):
return FirstSegment(name)
class FirstSegment(Resource):
def __init__(self, first):
self.first = first
Resource.__init__(self)
def getChild(self, name, request):
return SecondSegment(self.first, name)
class SecondSegment(Resource):
def __init__(self, first, second):
self.first = first
self.second = second
Resource.__init__(self)
def render_GET(self, request):
return "Handling {first}/{second}".format(
first=self.first,
second=self.second,
)
root = Root()
site = Site(root)
...
另一种选择是使用 "leaf" 资源,即使在请求中有更多路径段也会停止遍历:
from twisted.web.resource import Resource
class HandleItAll(Resource):
isLeaf = True
def render_GET(self, request):
return "Handling {path}".format(path="/".join(request.postpath))
root = HandleItAll()
site = Site(root)
...
我想要两个路径变量。 url 模式如下所示:
http://<host>:<port>/<path_var_1>/<path_var_2>
其中 path_var_1 & path_var_2 是动态的。我可以按照指示服用一个 here 但我怎样才能服用两个或更多?
使用 Twisted Web 的资源抽象(txThings 资源抽象似乎建立在其上)使用多个路径段的一种惯用方法是拥有多个资源。对应于路径前面部分的资源收集状态并将其传递给对应于路径后面部分的资源。
例如
from twisted.web.resource import Resource
class Root(Resource):
def getChild(self, name, request):
return FirstSegment(name)
class FirstSegment(Resource):
def __init__(self, first):
self.first = first
Resource.__init__(self)
def getChild(self, name, request):
return SecondSegment(self.first, name)
class SecondSegment(Resource):
def __init__(self, first, second):
self.first = first
self.second = second
Resource.__init__(self)
def render_GET(self, request):
return "Handling {first}/{second}".format(
first=self.first,
second=self.second,
)
root = Root()
site = Site(root)
...
另一种选择是使用 "leaf" 资源,即使在请求中有更多路径段也会停止遍历:
from twisted.web.resource import Resource
class HandleItAll(Resource):
isLeaf = True
def render_GET(self, request):
return "Handling {path}".format(path="/".join(request.postpath))
root = HandleItAll()
site = Site(root)
...