Маршрутизация действий с перевернутым URL

Если у меня есть, например, этот простой TCP-сервер:

from twisted.internet import reactor
from twisted.web.resource import Resource
from twisted.web.server import Site

from resources import SomeResource


logging.info("Starting server...")
root = Resource()
root.putChild("test", SomeResource())
reactor.listenTCP(8080, Site(root))
reactor.run()

Например, с SomeResource, который имеет методы render_GET и render_POST. Тогда я знаю, что могу просто отправить POST/GET на имя хоста: 8080/test

Но теперь я хочу сделать это более сложным, я хотел бы сделать что-то вроде hostname:8080/test/status

Можно ли это определить внутри SomeResource() как метод? или мне нужно определить новый ресурс для каждого другого URL-адреса?


person lapinkoira    schedule 07.06.2016    source источник
comment
twisted.readthedocs. io/en/twisted-16.2.0/web/howto/web-in-60/ должен вам помочь. Если ваш код становится действительно сложным, я бы порекомендовал Klein github.com/twisted/klein, который намного проще. написать.   -  person notorious.no    schedule 08.06.2016


Ответы (1)


Если вы хотите, чтобы все, что идет в /test/...., попадало в метод рендеринга (render_GET/render_POST) SomeResource, просто определите его как лист:

class SomeResource(Resource):
    isLeaf = True

Если вы хотите просмотреть часть после «test/», это будет указано в request.postpath.

person moshez    schedule 07.06.2016
comment
Здравствуйте, спасибо за ваш ответ! будет ли это решение похоже на использование метода getChild, а затем его перенаправление? - person lapinkoira; 08.06.2016
comment
Нет, не делай этого. Таким образом вы потеряете информацию из запроса (request.postpath). - person moshez; 31.10.2016