我正在使用Web2py框架构建一个应用程序...我不想使用请求对象来获取所有的查询字符串参数,而是我想用命名参数构建我的控制器并拥有路由器将查询字符串(或表单数据)字典解压缩到命名参数中并调用我的控制器。
所以代替
的控制器方法create_user():
我将使用全局request()对象并浏览变量列表...我宁愿拥有
create_user(first_name, last_name, email):
就像我在其他MVC平台上看到的一样。
这已经可以在Web2py中使用吗?或者有插件吗?或者我需要自己添加吗?
答案 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视图样式控制器中解压缩逻辑。