前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django操作接口集删除(十三)

Django操作接口集删除(十三)

作者头像
zx钟
发布2019-07-19 14:24:59
8920
发布2019-07-19 14:24:59
举报
文章被收录于专栏:测试游记测试游记

今天是删除接口集的操作,删除的话可以做成物理删除和逻辑删除。 由于数据有可能需要被找回,所以采用的是逻辑删除。 首先是删除的JavaScript代码

代码语言: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()就可以了。 但是我们通过控制字段进行逻辑删除。打开数据库可视化工具查看

数据库 可以看到又一个is_delete字段,我们通过改变它来改变页面的展示

代码语言:javascript
复制
    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函数中看一下,为什么数据库返回的内容没有被传递下去,进行渲染。

断点 查看is_delete是0的时候的调试内容

存在 查看is_delete是1的时候的调试内容

不存在 发现两者返回的东西居然是一样的。 好吧原来是代码写错了。 我们的数据库查询这一部分缺少了筛检,增加is_delete的判断就好了

修改数据库查询 tags = models.Callections.objects.values('id', 'name').filter(is_delete=False).order_by('update_time') 增加了is_delete=False的判断,这下我们在调试一遍

再次调试 这样就可以看到返回的内容是空了 Django给我们自动生成的Sql语句是query里面的那句

代码语言:javascript
复制
SELECT `tb_tag`.`id`, `tb_tag`.`name` FROM `tb_tag` WHERE 
`tb_tag`.`is_delete` = False ORDER BY `tb_tag`.`update_time` ASC

好了好了,这就完成了其实数据还在的逻辑删除了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档