Как я могу заставить 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 будет привязан к кортежу, который пуст, если аргументы не переданы, имеет один элемент, если передан один аргумент, два, если два, и так далее. Это, конечно же, к вашему коду для разумного и надлежащего решения различных подобных случаев.