我正在使用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视图样式控制器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top