10

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

所以而不是控制器方法

create_user():

我将在其中使用全局 request() 对象并查看 vars 列表...我宁愿拥有

create_user(first_name, last_name, email):

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

这在 Web2py 中已经可行了吗?或者有插件吗?还是我需要自己添加?

4

3 回答 3

11

没有。如书中所述,表单的 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 

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

于 2010-06-09T07:19:55.317 回答
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 中不允许的字符(web2py 在验证只允许 [\w\-\.] 时处于挑剔状态)。

于 2010-06-09T15:44:02.243 回答
1

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

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

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

根据您选择在 web 客户端/javascript、web2py 视图和 web2py 控制器之间划分职责的方式,让控制器函数成为真正的 API(带有可选参数)而不是在其中构建参数解包逻辑是有意义的一个 web 视图样式控制器。

于 2013-06-17T13:59:29.990 回答