Tornado与JS交互工作
如下图所示,在我们进行对服务配置管理的时候,需要进行权限控制:本人添加的服务配置信自己可以修改,但不能修改其他人添加的服务信息;服务管理员和系统管理员可以修改所有服务配置信息。
一,添加Js控制
为了达到这个效果,我们添加相应的js函数,在Tornado循环生成每一行的数据信息的时候,添加上相应的权限控制函数;为了有效地控制第一行的内容,需要对函数进行区分,实现代码如下所示:
代码解析:
(1) 大部分是HTMl页面布局信息,就不多做介绍了。
(2) 其中{% for i in range(0,servicecount) %},为tornado循环获取后端handler传递给前端的数据。
(3) 而在每一行数据产生后,添加一个js函数,function assright{{ i }}(assign),为了区分每一行的数据,我们在函数后面添加了循环变量I,参数assign则表示是不是服务管理员和系统管理员。
二,执行js控制
添加完所有的js后,tornado循环生成了数据,同时添加上了所有的控制代码,如下所示:
相应的js函数assright0和assright1,貌似很完美哟,可是页面相应的效果没有出来。经过调试发现,js代码根本没有执行,这是为什么呢?
后来研究发现,是Tornado的原因,它只会通过{{i}}来替换变量值,而不会执行函数。要执行函数,还需要想别外的方法来处理。
思考:
(1)经过tornado的替换,我们发现需要的js函数都存在了。
(2)要执行相关的函数,需要循环调用相应的函数,循环条件为数据条数。可是循环的时候要先拼出函数名assright0,assright1……然后再执行。
(3)同时需要根据权限来传不同的参数进行控制。
(4)如何先拼出函数名,然后再执行函数呢?在网上查询了好多地方,发现可以用函数:window[函数名](参数),来实现我们的需要。
所以代码如下:
function logincheck()
{
//检测登录
righcontrol();
//没用服务管理权限,则跳转到首页
var serdmin = document.getElementByIdx_x_x("serman");
if( serdmin.style.display=="none")
{
window.location.href="/";
}
//执行权限设置脚本函数
for (i=0;i
{
var scfu="assright"+i;
if($("#seruright").val()=="系统管理员" || $("#seruright").val()=="服务管理员")
{
window[scfu](1);
}
else
{
window[scfu](0);
}
}
}
window.onload=logincheck;
通过这段代码,我们就可以完成先用Tornado替换需要的变量,组合出相关的Js函数,然后再在页面加载的时候执行函数。
三,总结
利用tornado框架可以轻松地开发出python语言编写的网站,不过要做到前端的效果,一定要考虑tornado的特性,以及js,jquery的执行特点,合理地使用它们,才能达到自己想要的效果。