如何在web2py中使用request.vars?

时间:2015-01-15 23:48:39

标签: web2py

我试图理解request.vars在web2py中的工作原理。我很感激一些帮助。

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

如果我想在其他函数中获取变量x的值,我是否使用request.vars?我试过这种方式,但当然,它没有工作:

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

3 个答案:

答案 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的内容只是中用于调用控制器功能的查询参数的内容。