代码之家  ›  专栏  ›  技术社区  ›  Nicholas Franceschina rob2universe

带参数的Web2py控制器?

  •  9
  • Nicholas Franceschina rob2universe  · 技术社区  · 14 年前

    我正在建立一个应用程序使用Web2py框架。。。我不希望必须使用request对象来获取所有querystring参数,相反,我希望用命名参数构建我的控制器,并让路由器将querystring(或form data)字典解包到命名参数中,然后调用我的控制器。

    所以用一个控制器代替

    create_user():
    

    create_user(first_name, last_name, email):
    

    就像我在其他MVC平台上看到的那样。

    3 回复  |  直到 14 年前
        1
  •  11
  •   Caleb Hattingh    12 年前

    不,如合同所述 book ,窗体的URL

    http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2
    

    映射到应用程序(文件夹) a ,控制器(文件) c.py ,函数 f ,其他参数必须从请求对象中解包为

    x, y, z = tuple(request.args)
    p = request.vars['p'] # p=1
    q = request.vars['q'] # q=2 
    

        2
  •  2
  •   mdipierro    14 年前

    我愿意

    def create_user():
        try:
            first_name, last_name, email = request.args[:3]
        except:
            redirect('some_error_page')
    

    但是请注意,名字、姓氏和电子邮件可能包含路径信息中不允许的字符(当验证只允许[\w \-\.]时,picky中的web2py)。

        3
  •  1
  •   Chris Johnson user3351229    11 年前

    web2py控制器可以使用参数。当控制器函数具有@service decorator时,可以根据服务类型使用参数,例如:

    @service.jsonrpc
    def somefunction(a=None, b='default'):
        ## whatever
    

    这种方法适用于控制器函数实际上是API而不是生成web视图的方法的情况。在并行定义web视图和API样式的函数,并让web视图调用API函数方面,您可以做一些很好的事情,以确保您能够很好地分离视图;控制器。