Tornado与JS交互工作

  如下图所示,在我们进行对服务配置管理的时候,需要进行权限控制:本人添加的服务配置信自己可以修改,但不能修改其他人添加的服务信息;服务管理员和系统管理员可以修改所有服务配置信息。

Tornado与JS交互工作

一,添加Js控制

为了达到这个效果,我们添加相应的js函数,在Tornado循环生成每一行的数据信息的时候,添加上相应的权限控制函数;为了有效地控制第一行的内容,需要对函数进行区分,实现代码如下所示: Tornado与JS交互工作

 代码解析:

(1)    大部分是HTMl页面布局信息,就不多做介绍了。

(2)    其中{% for i in range(0,servicecount) %},为tornado循环获取后端handler传递给前端的数据。

(3)    而在每一行数据产生后,添加一个js函数,function assright{{ i }}(assign),为了区分每一行的数据,我们在函数后面添加了循环变量I,参数assign则表示是不是服务管理员和系统管理员。

二,执行js控制

     添加完所有的js后,tornado循环生成了数据,同时添加上了所有的控制代码,如下所示:

Tornado与JS交互工作

相应的js函数assright0assright1,貌似很完美哟,可是页面相应的效果没有出来。经过调试发现,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的执行特点,合理地使用它们,才能达到自己想要的效果。


原文地址:https://www.cnblogs.com/eagleking0318/p/6520729.html