Django操作接口集删除(十三)
2019-03-08 本文已影响4人
测试游记
今天是删除接口集的操作,删除的话可以做成物理删除和逻辑删除。
由于数据有可能需要被找回,所以采用的是逻辑删除。
首先是删除的JavaScript代码
let $tagDel = $(".btn-del"); // 1. 获取删除按钮
$tagDel.click(function () { // 2. 点击触发事件
let _this = this;
let sTagId = $(this).parents('tr').data('id');
let sTagName = $(this).parents('tr').data('name');
fAlert.alertConfirm({
title: "确定删除 " + sTagName + " 接口集吗?",
type: "error",
confirmText: "确认删除",
cancelText: "取消删除",
confirmCallback: function confirmCallback() {
$.ajax({
// 请求地址
url: "/callections/" + sTagId + "/", // url尾部需要添加/
// 请求方式
type: "DELETE",
dataType: "json",
})
.done(function (res) {
if (res.errno === "0") {
// 更新标签成功
message.showSuccess("接口集删除成功");
$(_this).parents('tr').remove();
} else {
swal.showInputError(res.errmsg);
}
})
.fail(function () {
message.showError('服务器超时,请重试!');
});
}
});
});
从ajax中可以看出请求的方式是DELETE,url地址还是之前那个带id的地址。
所以apps/workspace/urls.py中都不用增加新的路由了
在apps/workspace/views.py中的CallectionsEditView类中增加一个delete方法就可以了。
从url里面我们会拿到一个id,直接查询数据库:
tag = models.Callections.objects.only('id').filter(id=tag_id).first()
就可以筛选出我们需要删除的那条记录了。
如果要真的删除那只需要使用:tag.delete()就可以了。
但是我们通过控制字段进行逻辑删除。打开数据库可视化工具查看
![](https://img.haomeiwen.com/i7924986/1dfd40002d50aae1.png)
可以看到又一个is_delete字段,我们通过改变它来改变页面的展示
def delete(self, request, tag_id):
tag = models.Tag.objects.only('id').filter(id=tag_id).first()
if tag:
# 真删
# tag.delete()
tag.is_delete = True
tag.save(update_fields=['is_delete'])
return to_json_data(errmsg="标签删除成功")
else:
return to_json_data(errno=Code.PARAMERR, errmsg="需要删除的标签不存在")
具体它为什么会改变页面展示我们进行断点调试
在CallectionsView类的get函数中看一下,为什么数据库返回的内容没有被传递下去,进行渲染。
![](https://img.haomeiwen.com/i7924986/f75323718f924ef8.png)
查看is_delete是0的时候的调试内容
![](https://img.haomeiwen.com/i7924986/3a8e5b973f62dc59.png)
查看is_delete是1的时候的调试内容
![](https://img.haomeiwen.com/i7924986/45f637fe99e73ef3.png)
发现两者返回的东西居然是一样的。
好吧原来是代码写错了。
我们的数据库查询这一部分缺少了筛检,增加is_delete的判断就好了
![](https://img.haomeiwen.com/i7924986/e9114c214db8c40a.png)
tags = models.Callections.objects.values('id', 'name').filter(is_delete=False).order_by('update_time')
增加了is_delete=False的判断,这下我们在调试一遍
![](https://img.haomeiwen.com/i7924986/11c4a1f4ae3f2ebf.png)
这样就可以看到返回的内容是空了
Django给我们自动生成的Sql语句是query里面的那句
SELECT `tb_tag`.`id`, `tb_tag`.`name` FROM `tb_tag` WHERE
`tb_tag`.`is_delete` = False ORDER BY `tb_tag`.`update_time` ASC
好了好了,这就完成了其实数据还在的逻辑删除了。
欢迎关注我的公众号:zx94_11
![](https://img.haomeiwen.com/i7924986/febe3596c11eef97.jpg)