我试图理解request.vars在web2py中的工作原理。我很感激一些帮助。
def one():
x = 5
return dict(x=x)
如果我想在其他函数中获取变量x的值,我是否使用request.vars?我试过这种方式,但当然,它没有工作:
def two():
y = request.vars.x
return locals()
答案 0 :(得分:2)
request.vars包含在HTTP请求正文中传递的参数(通常是从提交表单派生的GET或POST请求)。
在您的示例中,一旦定义了x,您可以在一个名为value
的变量中传递x时将其从一个重定向到两个:
redirect(URL('two', vars=dict(value=x)))
然后在两个中,您可以通过request.vars['value']
访问x的值。
此处的文档中还有一些其他详细信息:http://web2py.com/books/default/chapter/29/04/the-core#request
答案 1 :(得分:2)
根据您描述的工作流程,使用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请求正文中传递的值。
如果用户通过操作two
开始one
行动的方式是点击one
页面上的链接,则另一个选项是包含x
的值在链接URL的查询字符串中。
在控制器中:
def one():
x = 5
return dict(x=x)
在one.html视图中:
{{=x}}
<a href="{{=URL('two', vars=dict(x=x))}}">Go to two</a>
然后,当用户点击该链接时,在two
函数中x
的价值将在request.vars.x
中可用(但如果访问two
页面其他一些方法,request.vars.x
将为空。请注意,此方法的安全性较低,因为有人可以请求two
URL并在查询字符串中传递x
的任意值。通过使用会话,您可以确保x
的值不能更改。
答案 2 :(得分:0)
由于您的问题不是如何,而是要了解request.vars 是,我将添加以下内容: (来自:http://web2py.com/books/default/chapter/29/04/the-core#Dispatching) - 大约50行...
web2py映射格式的GET / POST请求:
http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2
运行f in 应用程序a中的控制器“c.py”,它存储URL参数 在请求变量中如下:
request.args = ['x','y','z']和:
request.vars = {'p':1,'q':2} 和:
request.application ='a'request.controller ='c'request.function = 'f'在上面的例子中,
因此,要回答您的问题,request.vars
的内容只是中用于调用控制器功能的查询参数的内容。