(Как) я могу передать аргументы POST из одного класса cherrypy page в другой?

#post #cherrypy

#Публикация #cherrypy

Вопрос:

Следуя руководству по Cherrypy, кажется довольно простым получать данные из формы «внутри» класса страницы. Теперь я попытался передать аргументы на индексную страницу другого класса страницы следующим образом:

На моей странице корневого индекса у меня есть следующая форма:

 <form action="otherpage" method="post">
    <input type="text" name="arg1"> 
    ... 
</form>
  

в то время как класс принимающей страницы имеет вид:

 class OtherPage:
   def index(self, arg1=None):
      return arg1
  

и он монтируется следующим образом

 root.otherpage = Otherpage()
  

Он всегда показывает пустую страницу, независимо от того, что я ввожу в форму, поэтому я предполагаю, что он неправильно передает параметр «arg». Вы видите, что не так?

Ответ №1:

Когда вы отправляете запрос на ‘otherpage’, CherryPy пытается использовать ваш метод Otherpage.index для обработки запроса. Однако происходят две вещи:

  1. По умолчанию включен инструмент косой черты в конце со следующими значениями по умолчанию: trailing_slash(missing=True, extra=False, status=None, debug=False) . Это означает, что если вы запросите URI otherpage?arg1=foo , в котором отсутствует косая черта в конце, то CherryPy добавит косую черту в конце и перенаправит клиента на запрос otherpage/?arg1=foo вместо этого. Обратите внимание, что (поскольку «дополнительный» аргумент по умолчанию равен False) обратное неверно: otherpage/ не будет перенаправлять на otherpage .
  2. Однако есть дополнительная проблема, поскольку запрос является POST, а не GET . CherryPy вызывает перенаправление 303 или 302 (в зависимости от того, какую версию HTTP поддерживает ваш клиент), и это, вероятно, не то, что вы хотите для перенаправления POST. Смотрите http://docs.cherrypy.org/dev/refman/_cperror.html#redirecting-post для полного обсуждения.

Вам следует либо:

  1. добавьте косую черту в конце вашего HTML, если можете,
  2. установите tools.trailing_slash.missing = False в конфигурации (в этом случае, я полагаю, метод index будет просто обслуживать ресурс без перенаправления, или
  3. предоставьте более подходящий аргумент «status» инструменту завершающей косой черты, если у вас есть контроль над поведением клиента.

Ответ №2:

Сегодня впервые попробовал CherryPy и столкнулся с точно такой же проблемой. Я думаю, что Otherpage сопоставлен неправильно, потому что в результирующем URI отсутствует косая черта в конце.

Попробуйте

 <form action="otherpage/" method="post">
...