Какова правильная процедура добавления дочерних путей в корень ресурса с помощью веб-сервера Twisted? - PullRequest
0 голосов
/ 21 сентября 2018

Я не уверен, почему приведенный ниже код приводит к двум отправленным ответам, а не одному.

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

class FormPage(Resource):
    isLeaf = True 

def render_GET(self, request):
   return "<html><HEAD></HEAD><body>OK</body></html>"

def render_POST(self, request):
    return "<html><HEAD></HEAD><body>OK</body></html>"

parser = OptionParser()

parser.add_option("-p", dest="port",type="int",default=80,
                    help="Local Port to listen ON")

parser.add_option("-u", dest="form1",default="api",
                    help="URL form page")

parser.add_option("-w", dest="form2", default="name",
                    help="URL form page")

(options, args) = parser.parse_args()


print 'Messaging App Server will receive messages posted to  "0.0.0.0:%d/%s/%s"' % (options.port, options.form1, options.form2)


root = FormPage() 
root.putChild("%s" % options.form1, FormPage())
root.putChild("%s" % options.form2, FormPage())


print("\nroot = %s\n" % root)


factory = Site(root) 
reactor.listenTCP(options.port, factory) 
reactor.run() 

Я запускаю приведенный выше код на своем сервере следующим образом:

python filename.py 

Затем я открываю браузер и введите URL-адрес следующим образом:

192.168.x.y/api/name

И, как и ожидалось, я получаю следующий ответ:

ok

Однако, когда у меня одновременно работает tcpdump, я вижу, что render_GET вызывается дважды, а не один раз, но я не понимаю, почему?

Может ли кто-нибудь предложить решение / совет?

У меня такое ощущение, что я неправильно понимаю функцию putChild ().Моя цель - добавить путь к IP-адресу.Насколько я понимаю, этот фрагмент кода создает ресурс, который будет соответствовать корню иерархии URL

root = FormPage()

Итак, с установленным корнем я затем добавляю дочерние элементы:

root.putChild("%s" % options.form1, FormPage())
root.putChild("%s" % options.form2, FormPage())

Насколько мне известно, это вызывает извлечение корня, затем «api», а затем «name».

Это тот случай, когда я получаю «ok», возвращаемую для вызова «api»а затем несколько минут спустя для «имени»?

Если мое предположение верно, как мне добавить путь api / name, чтобы не было двух вызовов, то есть только одного «ок»?

...