#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 для обработки запроса. Однако происходят две вещи:
- По умолчанию включен инструмент косой черты в конце со следующими значениями по умолчанию:
trailing_slash(missing=True, extra=False, status=None, debug=False)
. Это означает, что если вы запросите URIotherpage?arg1=foo
, в котором отсутствует косая черта в конце, то CherryPy добавит косую черту в конце и перенаправит клиента на запросotherpage/?arg1=foo
вместо этого. Обратите внимание, что (поскольку «дополнительный» аргумент по умолчанию равен False) обратное неверно:otherpage/
не будет перенаправлять наotherpage
. - Однако есть дополнительная проблема, поскольку запрос является POST, а не GET . CherryPy вызывает перенаправление 303 или 302 (в зависимости от того, какую версию HTTP поддерживает ваш клиент), и это, вероятно, не то, что вы хотите для перенаправления POST. Смотрите http://docs.cherrypy.org/dev/refman/_cperror.html#redirecting-post для полного обсуждения.
Вам следует либо:
- добавьте косую черту в конце вашего HTML, если можете,
- установите
tools.trailing_slash.missing = False
в конфигурации (в этом случае, я полагаю, метод index будет просто обслуживать ресурс без перенаправления, или - предоставьте более подходящий аргумент «status» инструменту завершающей косой черты, если у вас есть контроль над поведением клиента.
Ответ №2:
Сегодня впервые попробовал CherryPy и столкнулся с точно такой же проблемой. Я думаю, что Otherpage сопоставлен неправильно, потому что в результирующем URI отсутствует косая черта в конце.
Попробуйте
<form action="otherpage/" method="post">
...