题
我正在使用web2py框架构建一个应用程序...我不想使用请求对象获取所有Querystring参数,而是想用命名参数构建控制器,并让路由器解开QueryString。 (或形式数据)字典到命名参数中,并致电我的控制器。
因此,代替了控制器的方法
create_user():
我将在哪里使用全局请求()对象并浏览vars列表...我更喜欢拥有
create_user(first_name, last_name, email):
就像我在其他MVC平台中看到的那样。
这已经可以在Web2py中吗?还是有插件?还是我自己需要添加?
解决方案
否。如 书, ,形式的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检测到有效的控制器的功能至少具有一个参数。
其他提示
我愿意
def create_user():
try:
first_name, last_name, email = request.args[:3]
except:
redirect('some_error_page')
但是请注意,first_name,last_name和电子邮件可能包含path_info中不允许使用的字符(path2py in picky in Picky in验证仅允许[ w - 。])。
在某种情况下,Web2PY控制器可以使用参数。当控制器函数具有@Service Decorator时,可以使用参数,具体取决于服务类型,例如:
@service.jsonrpc
def somefunction(a=None, b='default'):
## whatever
这种方法是因为当控制器函数确实是API时,而不是生成Web视图的方法。您可以在并行定义Web视图和API式函数方面可以做一些好事,并且具有Web视图调用API函数,以确保您有良好的视图和控制器分离。
根据您选择如何将职责划分在Web客户端 / JavaScript,Web2PY视图和Web2PY控制器之间,拥有真正的API(带有可选参数)而不是构建参数unpacking逻辑的控制器函数是有意义的。 Web视图样式控制器。