如何在 web2py 中使用 request.vars?

How to use request.vars in web2py?

我想了解 request.vars 在 web2py 中是如何工作的。非常感谢您的帮助。

def one():
    x = 5
    return dict(x=x)

如果我想在另一个函数中获取变量 x 的值,我应该使用 request.vars 吗?我试过这种方法,当然,它没有用:

def two():
    y = request.vars.x
    return locals() 

request.vars 包含在 HTTP 请求正文中传递的参数(通常是从提交表单派生的 GET 或 POST 请求)。

在您的示例中,定义 x 后,您可以在将 x 传递给名为 value 的变量时从一重定向到二:

redirect(URL('two', vars=dict(value=x)))

然后在两个中你可以通过 request.vars['value'].

访问 x 的值

这里的文档中有一些额外的细节:http://web2py.com/books/default/chapter/29/04/the-core#request

根据您描述的工作流程,使用 session 存储 x 的值可能最有意义。

在控制器中:

def one():
    session.x = 5
    return dict()

def two():
    y = session.x
    return locals() 

在 one.html 视图中(以及在任何其他操作的视图中,包括 two):

{{=session.x}}

使用会话存储需要在单独的 HTTP 请求期间由不同的控制器操作访问的值。 request.vars 只是捕获在 单个 HTTP 请求期间在 URL 查询字符串或 POST 请求正文中传递的值。

如果用户从操作 one 转到操作 two 的方式是单击 one 页面上的 link,则另一种选择是包含值link URL.

的查询字符串中的 x

在控制器中:

def one():
    x = 5
    return dict(x=x)

在 one.html 视图中:

{{=x}}
<a href="{{=URL('two', vars=dict(x=x))}}">Go to two</a>

然后当用户在 two 函数中单击 link 时,x 的值将在 request.vars.x 中可用(尽管如果 two 页面通过其他方式访问,request.vars.x 将为空)。请注意,此方法不太安全,因为有人可以请求 two URL 并在查询字符串中传递 x 的任意值。通过使用会话,您可以确保无法更改 x 的值。

因为你的问题不是如何去做,而是关于理解什么request.vars 我会补充这个: (来自:http://web2py.com/books/default/chapter/29/04/the-core#Dispatching)- 大约 50 行...

web2py maps GET/POST requests of the form:

http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2

to function f in controller "c.py" in application a, and it stores the URL parameters in the request variable as follows:

request.args = ['x', 'y', 'z'] and:

request.vars = {'p':1, 'q':2} and:

request.application = 'a' request.controller = 'c' request.function = 'f' In the above example,

所以,回答你的问题,request.vars的内容就是只是用来调用URL中查询参数的内容你的控制器功能。