带参数的Web2py控制器?

时间:2010-06-09 06:12:10

标签: python web2py

我正在使用Web2py框架构建一个应用程序...我不想使用请求对象来获取所有的查询字符串参数,而是我想用命名参数构建我的控制器并拥有路由器将查询字符串(或表单数据)字典解压缩到命名参数中并调用我的控制器。

所以代替

的控制器方法
create_user():

我将使用全局request()对象并浏览变量列表...我宁愿拥有

create_user(first_name, last_name, email):
就像我在其他MVC平台上看到的一样。

这已经可以在Web2py中使用吗?或者有插件吗?或者我需要自己添加吗?

3 个答案:

答案 0 :(得分:11)

没有。如book中所述,表单的网址为

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 

此外,web2py专门检测有效的控制器函数作为那些没有参数的函数。 AFAICR,这与Django相反,Django将有效​​的控制器函数检测为具有至少一个参数的控制器函数。

答案 1 :(得分:2)

我做

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

但请注意first_name,last_name和email可能包含path_info中不允许使用的字符(验证时只有[\ w \ - \。]才允许使用web2py)。

答案 2 :(得分:1)

在某种情况下,web2py控制器可以使用参数。当控制器函数具有@service修饰符时,可以使用参数,具体取决于服务类型,例如:

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

这种方法适用于控制器功能实际上是API,而不是生成Web视图的方法。您可以在并行定义Web视图和API样式函数方面做些好事,并让Web视图调用API函数,以确保您具有良好的视图分离和视图。控制器。

根据您选择在Web客户端/ javascript,web2py视图和web2py控制器之间划分职责的方式,使控制器功能成为真正的API(带有可选参数)而不是构建参数是有意义的 - 在Web视图样式控制器中解压缩逻辑。