我正在使用Web2py框架构建一个应用程序...我不想使用请求对象来获取所有的查询字符串参数,相反,我想用命名参数构建我的控制器,并让路由器将查询字符串(或表单数据)字典解压到命名参数中,然后调用我的控制器。
因此,不使用控制器方法
create_user():
其中我将使用全局request()对象并查看vars列表...相反,我更倾向于
create_user(first_name, last_name, email):
就像我在其他MVC平台中看到的那样。
这在Web2py中已经可以实现了吗?或者它有一个插件吗?或者我需要自己添加吗?
发布于 2010-06-09 15:19:55
不是的。如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
此外,web2py专门将有效的控制器函数检测为没有参数的函数。AFAICR,这与Django相反,Django将有效的控制器函数检测为至少有一个参数的函数。
发布于 2010-06-09 23:44:02
我知道
def create_user():
try:
first_name, last_name, email = request.args[:3]
except:
redirect('some_error_page')
但请注意,first_name、last_name和电子邮件可能包含path_info中不允许的字符(在仅验证\w-时,使用picky中的web2py。是允许的)。
发布于 2013-06-17 21:59:30
在某些情况下,web2py控制器可以使用参数。当控制器函数具有@service修饰符时,可以使用参数,具体取决于服务类型,例如:
@service.jsonrpc
def somefunction(a=None, b='default'):
## whatever
这种方法适用于控制器函数实际上是一个API,而不是生成web视图的方法。在并行定义web-view和API风格的函数,让web视图调用API函数方面,你可以做一些很好的事情,以确保你有一个良好的视图和控制器的分离。
根据您选择如何在web client / javascript、web2py视图和web2py控制器之间划分职责,拥有真正的API(带有可选参数)的控制器功能可能是有意义的,而不是在web视图样式的控制器中构建参数解包逻辑。
https://stackoverflow.com/questions/3003449
复制相似问题