(Как) я могу передать POST-аргументы из одного класса страницы "Вишня" в другой? - PullRequest
0 голосов
/ 08 апреля 2011

Следуя учебнику 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" не проходит правильно.Вы видите, что не так?

Ответы [ 2 ]

3 голосов
/ 10 апреля 2011

Когда вы отправляете запрос на «другую страницу», CherryPy пытается использовать ваш метод Otherpage.index для обработки запроса. Однако происходит две вещи:

  1. По умолчанию инструмент завершающего слэша включен со следующими значениями по умолчанию: trailing_slash(missing=True, extra=False, status=None, debug=False). Это означает, что, если вы запрашиваете URI otherpage?arg1=foo, в котором отсутствует завершающий слеш, CherryPy добавит завершающий слеш и перенаправит клиент на запрос otherpage/?arg1=foo. Обратите внимание, что (поскольку аргумент 'extra' по умолчанию равен 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 в конфигурации (в этом случае я считаю, что метод индекса будет просто обслуживать ресурс без перенаправления, или
  3. укажите более подходящий аргумент "status" для конечного слеш-инструмента, если вы контролируете поведение клиента.
1 голос
/ 10 апреля 2011

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

Попробуйте

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