Web2py:将变量从视图传递到控制器
Web2py: Pass a variable from view to controller
如何将 JavaScript 变量从视图传递到控制器中的 Python?我不想使用 request.vars
或 request.args
,因为这将允许用户通过在地址栏中键入来为操作提供任意参数。
示例视图:
<button onclick='myFunction();'>Execute</button>
<script>
function myFunction();{
var value = calculateValue();
//pass value to my_action
window.location = 'my_action';
}
</script>
示例控制器:
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 代码。您最好的选择是专注于对输入数据进行一些服务器端验证,或者将计算移至服务器(尽管可能计算是基于最终必须来自浏览器的某些输入,因此以某种方式进行验证).
如何将 JavaScript 变量从视图传递到控制器中的 Python?我不想使用 request.vars
或 request.args
,因为这将允许用户通过在地址栏中键入来为操作提供任意参数。
示例视图:
<button onclick='myFunction();'>Execute</button>
<script>
function myFunction();{
var value = calculateValue();
//pass value to my_action
window.location = 'my_action';
}
</script>
示例控制器:
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 代码。您最好的选择是专注于对输入数据进行一些服务器端验证,或者将计算移至服务器(尽管可能计算是基于最终必须来自浏览器的某些输入,因此以某种方式进行验证).