Как я могу заставить cherrypy принять переменное число параметров GET?
например, скажем, у меня установлен мой индексный модуль вихревой, как этот
>>> import cherrypy
>>> class test:
def index(self, var = None):
if var:
print var
else:
print "nothing"
index.exposed = True
>>> cherrypy.quickstart(test())
Если я отправляю более одного параметра GET, я получаю эту ошибку
404 Не найдено
Неожиданные параметры строки запроса: var2
Traceback (последний последний звонок):
файл "C:\Python26\Lib\сайт-пакеты\cherrypy_cprequest.py", строка 606, в ответ cherrypy.response.body = self.handler() Файл "C:\Python26\Lib\сайт-пакеты\cherrypy_cpdispatch.py", строка 27, в вызов test_callable_spec (self.callable, self.args, self.kwargs) Файл "C:\Python26\Lib\сайт-пакеты\cherrypy_cpdispatch.py", строка 130, в test_callable_spec "Параметры:% s" % ",".join(extra_qs_params)) HTTPError: (404, "Неожидаемая строка запроса параметры: var2 ')
Работает на CherryPy 3.1.2
Ответы
Ответ 1
def index(self, var=None, **params):
или
def index(self, **params):
'var2' будет ключом в params dict. Во втором примере так же будет "var".
Обратите внимание на другие ответы, ссылки на синтаксис * args не будут работать в этом случае, потому что CherryPy передает параметры запроса как аргументы ключевого слова, а не позиционные аргументы. Следовательно, вам нужен синтаксис **.
Ответ 2
Для полной общности, измените
def index(self, var = None):
к
def index(self, *vars):
vars
будет привязан к кортежу, который пуст, если аргументы не переданы, имеет один элемент, если передан один аргумент, два, если два, и так далее. Это, конечно же, к вашему коду для разумного и надлежащего решения различных подобных случаев.