如何强制cherrypy接受可变数量的GET参数?

时间:2010-01-03 01:33:48

标签: python cherrypy

例如,假设我的cherrypy索引模块设置如下

>>> import cherrypy
>>> class test:
        def index(self, var = None):
            if var:
                print var
            else:
                print "nothing"
        index.exposed = True

>>> cherrypy.quickstart(test())

如果我发送多个GET参数,我会收到此错误

  

404 Not Found

     

意外的查询字符串参数:   VAR2

     

追踪(最近的呼叫最后):
  文件   “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提供支持

2 个答案:

答案 0 :(得分:34)

def index(self, var=None, **params):

def index(self, **params):

'var2'将成为params dict的关键。在第二个例子中,'var'也是如此。

注意引用* args语法的其他答案在这种情况下不起作用,因为CherryPy将查询参数作为关键字参数传递,而不是位置参数。因此,您需要**语法。

答案 1 :(得分:1)

为了完整的一般性,请更改

    def index(self, var = None):

    def index(self, *vars):

vars将绑定到一个元组,如果没有传递参数则为空,如果传递一个参数则有一个项,如果有两个则有两个,依此类推。然后由你的代码决定如何明智和适当地处理各种这样的案件。