Как взять две переменные пути в Twisted Framework? - PullRequest
0 голосов
/ 22 января 2020

Я хотел бы иметь две переменные пути. Шаблон URL выглядит следующим образом:

http://<host>:<port>/<path_var_1>/<path_var_2>

, где path_var_1 & path_var_2 являются динамическими c. Я могу взять один, как указано здесь , но как мне получить два или более?

1 Ответ

1 голос
/ 28 января 2020

Один идиоматический c способ использования нескольких сегментов пути с помощью абстракции ресурса 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)
...

Другой вариант - использовать «лист» ресурсы, которые останавливают прохождение, даже если в запросе больше сегментов пути:

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)
...
...