GWXT--django项目 bug汇总
2018年11月21日
10:31
django (2, 1, 3, 'final', 0)
python 3.6.6
pycharm
sublime text3
sqlite3
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将于多久后开启/关闭’,后台执行命令)
取消按钮(不跳转不刷新,后台无操作)
问题:
-
现在方法是在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 关闭时清空 保存区