top of page

                                                           GWXT--django项目 bug汇总

2018年11月21日

10:31

django (2, 1, 3, 'final', 0)

python 3.6.6

pycharm

sublime text3

sqlite3

Bootstrap

jQueryUI 1.10.4

jQuery 1.10.2

CSS问题

address:电网      

project:django项目

browse:chrome

Bug:在修改前端页面样式时,修改css文件,不起作用

fix :Ctrl+F5 刷新页面,清除缓存

 

Bug:在修改前端页面样式时,修改css文件,无反应

fix :.css  为源文件 (有格式,便于查看)

  .min.css 为发布文件(渲染在浏览器上的)

    修改样式,要同步修改min

django问题

Bug:python manage.py makemigrations(appname)和python manage.py migrate(appname)(migrationfilename)

更新迁移到migrations文件夹中生成新文件0004.py

只将特定app(mysite)下的迁移文件(0004)刷新到数据库

python manage.py migrate appname 文件名

        注意:迁移文件名不能带后缀 .py

Bug:在<a>标签中添加 onclick 事件

在开关机和查看三个按钮上添加 onclick 事件,以向页面展示当前点击的 server名称,但server的信息是在跳转到当前页面时由view.py中的处理函数 render到页面上的

通过django 的for循环 ,添到表格中

想要拿到server的信息,并将name 作为参数传到 onclick处理函数中, 在 js中 alert

fix:

ps:

        通过点击跳转<a>中的url ,可以将数据放到url中,

        然后再 urls.py中将跳转的url =  ’/downserver‘ 和 处理函数绑定

        在 view.py中 定义处理函数,其参数request 就包含 <a>中存入的数据 ,利用这些数据便可以区分前端点击,处理不同任务

        最后 通过可以通过  return HttpResponseRedirect(‘/ulr’)重定向到其他页面(或当前页面)

py问题

views.py 中 全局变量保存 server_list_page 中查询到的 所有物理机状态,

目的:通过全局变量 传到vm_list_page 中,在 vm迁移弹框中显示

问题:server_list_page函数内部无法 为 全局变量赋值

原因:见 py 部分笔记

FIX:

       漏了个‘s’

       全局中 声明

server_list_page( ) 里 修改

vm_list_page( ) 里 调用,加到 返回字典里,一同传到 vm.html 页面

JS问题

Bug

   服务器列表页面,通过按钮操作server状态,

   单击时判断状态,输出不同的弹出框 alert()、 confirm()

   但都会跳转页面

   因为<a>中href = “/upserver?select_name={{ server.name }}”

   而 urls中 /upserver 绑定的处理函数 views.start_server() 会重定向到当前页面 (这里写法有问题,可能是我太菜..)

需求

    点击开关机按钮,判断状态,

    不满足条件:显示第一个提示框,只有确定按钮,单机不跳转不刷新页面

    满足条件:显示第二个弹出框(confirm()),

          确定按钮(不跳转不刷新页面,显示提示--‘server将于多久后开启/关闭’,后台执行命令)

          取消按钮(不跳转不刷新,后台无操作)

问题

  1. 现在方法是在js中阻止<a>跳转页面,将href=‘#’,onclick处理函数中添加 return false,这样单击按钮后,

       不跳转刷新页面,但没法通过url向后台传参数,告诉后台,该操作哪台服务器,尤其是在满足开关机条件时,

       单击提示框的确定按钮,如何保证不跳转刷新同时传递参数

   2. <aclass="btnbtn-info"href="/startserver?select_name={{server.name}}"onclick="upserver('{{server.name}}','{{server.status}}');returnfalse;">

     直接在onclick后面 加 return false,不是放在 js 代码里,就可以阻止 跳转刷新了。不用再 href=‘#’

但href似乎未 向/upserver 发送 request 请求(包含select_name),后台还是拿不到前端点击的 name,没有执行命令

FIX

     ajax异步发送请求给/startserver处理函数,取代href的链接跳转请求,如此一来,return false也可以去掉了

           html页面

          js代码

Jquery问题

Bug: jquery UI  中dialog 按钮 根据条件  禁用/开启

​FIX

Bug: dialog 出现多次连续 判断 (判断次数 随着 点击右侧迁移按钮/弹出dialog 的次数 增加)

     估计是 vm.html 页面在向 views.ready_migrate( )  传 vm.id  时出错(并不是)

    原因应该是   所有迁移按钮都绑定 了同一个 dialog弹框,而 jquery  的似乎不会自动清除上一次click事件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上述说明放在$('select').change( functiong( ) {  ajax })  内的ajax 会保存之前执行的 vmID值,并再每次点击按钮时,重复发送请求,

但如何从 ajax 所在的  dialog 代码部分 取到  外部 $('.migrate-info').button( ).click(function( ) 

的vmID 事件麻烦事,所以我在点击迁移按钮时,强行将 当前vmID 值传到 dialog中 的 p 标签保存,但不显示

 

 

需要认为 解除事件绑定,但现有的 解除绑定方法都尝试了, 但都不成功

  unbind( )、off( )、one( )    会造成第一个按钮能用一次,其他按钮无法使用

原因可能是所有按钮都绑定了同一个事件处理函数$('.migrate-info').button().click(function(){  如果解绑的话,

会使之后按钮功能失效,可见解绑是 针对事件的

 

该问题炒鸡复杂

 

    暂时 似乎 好像 有点 糊弄过去了

结果显示没有问题,但后台 还在重复发送之前的请求,只不过发送的请求都相同(使用的vmID 一样)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FIX

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

高能时刻,抓住 buger 的尾巴!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   每次重新打开dialog  实际上都执行了 重置菜单操作,改变了菜单当前值  也就触发了 change()事件以及内部的ajax   ,

   所以上面通过vmid 保存正确的vmID, 再传给 ajax的 方法只能治标不治本,

   还是重复触发change()和发送ajax请求(只不过携带的vmID相同且正确而已)

   如果 该 bug 真的是由 重置下拉菜单操作导致的,可以验证如下:

   将if 判断放到 change外面,在vmID 保存区(dialog中p标签)更新为正确值时(点击迁移按钮时将vmID传给弹出的dialog),

   再开启change事件,等待菜单值改变,发送ajax

   如果假设正确,注释掉$('select').find('option:first').prop('selected',true);   便可以从页面,chrome控制台、pycharm命令行同时得到正确响应

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

先用 老办法解决把

为了实现ui  造成了dialog和判断分离 使得 dialog 关闭后,内部逻辑没有关闭还在执行(ajax就在里面)

采用缓冲区保存 vmID 的方法必须在 dialog 关闭时清空 保存区

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1547561928(1).jpg
1547561918(1).jpg
1547561921(1).jpg
1547561915(1).jpg
1547562184(1).jpg
1547562175(1).jpg
1547562160(1).jpg
1547562182(1).jpg
1547562163(1).jpg
1547562166(1).jpg
1547562179(1).jpg
1547562650(1).jpg
1547562642(1).jpg
1547562648.jpg
1547562645(1).jpg
1547601800(1).jpg
1547601746(1).jpg
1547601758(1).jpg
1547601752(1).jpg
1547601797(1).jpg
1547601755(1).jpg
1547602849(1).jpg
1547602852(1).jpg
1547602818(1).jpg
1547602842(1).jpg
1547602846(1).jpg
1547603022(1).jpg
1547603289(1).jpg
1547603286(1).jpg
1547603283(1).jpg
1547603266(1).jpg
1547603280(1).jpg
1547603270(1).jpg
1547603277(1).jpg
1547603274.jpg
1547603262(1).jpg
1547603992.jpg
1547603923(1).jpg
1547603809(1).jpg
1547603820.jpg
1547603795(1).jpg
1547603798(1).jpg
1547603802(1).jpg
1547603788(1).jpg
1547603806(1).jpg
1547603791(1).jpg
1547604421.jpg
1547604417(1).jpg
1547604399(1).jpg
1547604396(1).jpg
bottom of page