Skip to main content
 首页 » 编程设计

javascript之Web2py:将变量从 View 传递到 Controller

2025年05月04日43tintown

如何将 JavaScript 变量从 View 传递到 Controller 中的 Python?我不想使用 request.vars 或 request.args,因为这将允许用户通过在地址栏中键入操作来为操作提供任意参数。

示例 View :

<button onclick='myFunction();'>Execute</button> 
<script> 
    function myFunction();{ 
        var value = calculateValue(); 
        //pass value to my_action 
        window.location = 'my_action'; 
    } 
</script> 

示例 Controller :

def index(): 
    return dict() 
 
def my_action(): 
    #retrieve passed variable 
    #handle the variable  
    #... 
    redirect(URL('index')) 

请您参考如下方法:

您可以进行 Ajax 调用:

<script> 
    function myFunction();{ 
        var value = calculateValue(); 
        ajax('{{=URL('default', 'my_action')}}' + '?value=' + value, [], ':eval'); 
    } 
</script> 

一旦返回 Ajax 响应,接着是客户端重定向:

def my_action(): 
    value = request.vars.value 
    # handle the variable  
    redirect(URL('index'), client_side=True) 

但是请注意,即使使用这种方法,有人仍然可以手动请求 /default/my_action?value=some_value 向您的函数发送任意数据(当然,他们会这样做在技术上更精通一点,因为上面的 URL 永远不会出现在浏览器地址栏中供他们观察——他们将不得不检查您的代码或观察网络流量以确定发出什么请求)。

一般来说,如果你在浏览器中计算一个值,然后通过 HTTP 请求将它提交给服务器,没有办法阻止有知识的攻击者提交一些任意数据而不是你的 Javascript 代码计算的值.您最好的选择是专注于对输入数据进行一些服务器端验证,或者将计算移至服务器(尽管可能计算是基于最终必须来自浏览器的某些输入,因此以某种方式进行验证).