实战(三)--删除和批量删除

上一节我们完成了带分页的模糊查询,本节我们继续删除操作。

同样的,先给出各个模块的代码(上一节的就不在贴出了):
urls.py

    path(‘curd/delete/‘,views.curd_delete,name=‘curddelete‘),
    path(‘curd/deleteall/‘,views.curd_delete_all,name=‘curddeleteall‘)

views.py

def curd_delete(request):
    #从前端(html)获取did数据
    did=request.GET.get(‘did‘)
    if did:
        #找到该数据,将其删除
        Book.objects.get(id=did).delete()
        #删除成功,返回显示页
        return redirect(‘/curd/‘)

def curd_delete_all(request):
    #先判断发过来的是否是post请求
    if request.method=="POST":
        #得到要删除的id列表
        values=request.POST.getlist(‘vals‘)
        for i in values:
            #如果id不为空,获取该字段,并将其删除,我们只删除book表,publisher表不变
            if i != ‘‘:
                book_obj = Book.objects.get(id=i)
                book_obj.delete()
        #删除成功返回显示页
        return redirect(‘/curd/‘)

curd.html

使用js前记得导入相应的文件,这里我使用的是百度源

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
    <script src="/static/bootstrap/js/bootstrap.js"></script>
    <script type="text/javascript" src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
    <script src="/static/js/curd.js"></script>
    <style>
        .myul li{
            list-style: none;
            margin-right: 4px;
            margin-bottom: 4px;
            float: left;
        }
    </style>
    <title>Document</title>
</head>
<body>
<div style="width: 100%;">
    <h3 align="center">书籍列表</h3>
    <table class="table" style="table-layout: fixed;">
        <div>
            <div style="float: left">
                <ul class=‘myul‘>
                    <li><a onclick="getValues()" href="" class="btn btn-danger input-sm">批量删除</a></li>
                    <li><a href="" class="btn btn-info input-sm">添加</a></li>
                </ul>
            </div>
            <div style="float: right">
                <form  method="get" action="" >
                    <input type="text" name="query"/>
                    <input type="submit" value="查询" name="submit" class="btn btn-primary input-sm"/>
                </form>
            </div>
        </div>
        <tr>
            <th width="25"><input type="checkbox" id="checkAll"  onclick="checkAll()"></th>
            <th>id</th>
            <th>title</th>
            <th>publisher</th>
            <th>introduce</th>
            <th>操作</th>
        </tr>
        <tr>
        {% for item in page%}
            <td><input type="checkbox" onclick="checkOne()" value="{{item.id}}" name="item"></td>
            <td>{{item.id}}</td>
            <td>{{item.title}}</td>
            <td>{{item.publisher}}</td>
            <td>{{item.introduce}}</td>
            <td><a onclick="return confirm(‘确认要删除?‘)"  class="btn btn-danger input-sm"
                    href="/curd/delete/?did={{item.id}}">删除</a></td>
        </tr>
        {% endfor %}
    </table>
</div>
<!--底部分页按钮显示-->
<div style="position: absolute;top: 30  %;left: 44%">
    <nav aria-label="Page navigation">
        <div class="pagination">
            <ul class="pagination" >
            {% if page.has_previous %}
                <li><a href="/curd/{{page.previous_page_number}}?query={{query}}"   aria-label="Previous">
                    <span aria-hidden="true">&laquo;</span></a></li>
            {% endif %}

            {% for num in page.paginator.page_range%}
                {%if pindex == page.number%}
                    <li><a href="">{{ num }}</a></li>
                {%else%}
                    <li><a href="/curd/{{num}}?query={{query}}">{{ num }}</a></li>
                {%endif%}
            {% endfor %}

            {% if page.has_next %}
                 <li><a href="{% url ‘person:curdindex‘ page.next_page_number%}?query={{query}}" aria-label="Next">
                      <span aria-hidden="true">&raquo;</span></a></li>
            {% endif %}
            </ul>
        </div>
    </nav>
</div>
</body>
</html>

curd.js

function checkAll() {
    var all = document.getElementById("checkAll");

    if (all.checked == true) {
        var ones = document.getElementsByName("item");
        for (var i = 0; i <= ones.length; i++) {
            ones[i].checked = true;
        }
    } else {
        var ones = document.getElementsByName("item");
        for (var i = 0; i <= ones.length; i++) {
            ones[i].checked = false;
        }
    }
}

function checkOne() {
    var one=document.getElementsByName("item");
    one.checked=true;
}

function getValues() {
    var valArr=[];
    var ones=document.getElementsByName(‘item‘);
    for (var i=0;i<ones.length;i++){
        if (ones[i].checked==true){
            valArr[i]=ones[i].value
        }
    }
    if (valArr.length!=0){
        // var vals = valArr.join(‘,‘);
        // alert(valArr);
        $.ajax({       #地址一定要正确
            url:"deleteall/",       #全部大写
            type:‘POST‘,
            contenType:‘application/json‘,       #不加这个,ajax会将结果后边加个[],例如{‘vals[]‘:[4,6,8]}
            traditional:true,        #不加这个,会报服务器终止了一个在运行的程序
            async: false,
            data:{
                ‘vals‘:valArr
            },
            success:function(){
                alert("删除成功");
            },
            error:function(){
                alert("删除失败");
            }
        })
    }
    else {
        var error_m="请选择数据";
        alert(error_m);
    }
}

最后启动服务器:

我们跳转到最后一页,

点击删除:

点击确定。这一条数据就被删除了。总共就只有三页数据了,我们仍然跳转到最后一页:选择21,25,点击批量删除:(也可以点击id前面的多选框,实现全选)

具体流程:点击多选框--调用onclick中的函数(位于js)--得到要删除的id列表--将数据封装并通过ajax请求传给后端--后端接受请求并解析数据,对每一个id所在数据进行删除--删除成功返回显示界面。

删除成功后:

技术总结:一步一步的进行实现,首先是单条记录的删除,这还挺简单,将每条记录的id传给url地址,然后后台利用get请求获取即可。批量删除就比较麻烦了,从多选框的加入-->(全选和全不选-->部分选取(这两部分用js即可))-->如何将js中的值传给后端(利用ajax发送请求(期间也遇到不少问题))-->后端得到值并进行删除-->返回给前端。一步一步的走过来,总会遇到不少坑(我都会慢慢总结在另一篇博客《django勘误中》)。总而言之,遇到问题不要慌张,多百度,查找解决问题的方法,另外,有的问题或者方法不可能和自己的完全一样,要学会变通。

从html-css-js-ajax-django,学得越多,越是理解知识的界限是无穷的。

下一节:对数据进行编辑。

原文地址:https://www.cnblogs.com/xiximayou/p/11792875.html

时间: 2024-10-05 07:11:32

实战(三)--删除和批量删除的相关文章

删除功能的实现(单个删除与批量删除)

2.1学生信息删除的实现 因为实体类已经编写好,所以不需要再编写实体类 a.在现有的student_list.html页面创建一个删除按钮,并在Javascript中编写删除方法 该删除是根据ID一个个删除,并非批量删除,因此点击删除按钮的时候会得到该行ID并传给该方法 b.编写子控制器getwaybeans.xml 新加一个关于删除的action c.编写对应的bean类方法 在现有的studentbean类中新建一个删除方法,该方法名为getwaybeans.xml文件中name属性 值得注

使用thinkPHP框架实现删除和批量删除一例【原创】

本文为作者原创,转载请注明原作者及转载地址. 上一篇讲了如何用thinkPHP框架实现数据的添加,那这一篇就讲一下如何用thinkPHP实现数据的删除和批量删除吧. 预期效果图: 原谅博主对照片的处理是如此的草率吧... 仍然是 通过MVC模式进行拆分: 首先是视图部分: <form action="__MODULE__/Admin/User/del" method="get"> <tr> <th width="4%"

网上图书商城项目学习笔记-015删除和批量删除购物车条目

一.流程分析 二.代码 1.view层 (1)list.jsp 1 <a href="<c:url value='/CartItemServlet?method=batchDelete&cartItemIds=${item.cartItemId }'/>">删除</a> 2 3 <a href="javascript:batchDelete();">批量删除</a> 4 /* 5 * 批量删除 6

bos 第3天(easyui弹窗边界问题、取派员的添加、修改和批量删除)

BOS项目笔记 第3天 今天内容安排: 1.解决window窗口bug 2.bos项目整体需求分析(基础设置.取派.中转.路由.报表) 3.取派员添加功能 4.jQuery easyUI控件datagrid使用方式 5.基于datagrid实现取派员分页查询 6.取派员批量删除和修改 1. 修复window控件bug 将上面的js文件引入jsp页面中 2. 基础设置部分需求分析 整个基础设置部分对应需求文档2.6章节. 2.1 基础档案设置 在其他的系统中通常称为"数据字典".提供基础

jdbc-批量插入、批量删除、批量更新

一.JDBC的批量插入 JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等.    我用Mysql5.1.5的JDBC driver 分别对三种比较常用的方法做了测试   方法一,使用PreparedStatement加批量的方法   Java代码       try{ Class.forName("com.MySQL.jdbc.Driver"); conn = DriverManager.getConnection(o_url, userName,passwo

5月21 汽车查询及批量删除----php方法

---恢复内容开始--- 这个与之前不同是在php中实现了页面的查询,引用AJAX实现批量删除及弹窗的显示 作业要求: 页面显示数据代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.or

批量删除redis数据库中的key

在redis数据库中,如果大量以某些字段开头或结尾的key,一般都会用到命令keys进行模糊匹配.但是当我们想删除批量指定的keys,却犯愁了,因为redis没有提供相关的命令.那我们怎么操作能实现预期的效果呢? (1) 删除单个key 127.0.0.1:6379> del key 如果知道有限多个key的名字,以下操作也可以实现批量操作 127.0.0.1:6379> del key1 key2 key3 .... 当key的数量达到一定数量时,这个方法明显时不现实的. 注意:redis命

sql server中的大数据的批量操作(批量插入,批量删除)

首先我们建立一个测试用员工表 ---创建一个测试的员工表--- create table Employee( EmployeeNo int primary key, --员工编号 EmployeeName nvarchar(50) null, --员工名称 CreateUser nvarchar(50) null, --创建人 CreateDate datetime null, --创建时间 ) 执行后结果: 那么假如我们要批量插入10000条数据,应该怎么办? 这里有四种方法(普通循环,事务循

docker 批量删除 镜像 容器

我们在docker构建和测试时,经常会产生很多无用的镜像或者容器,我们可用如下两条命令一个一个删除. docker container rm 容器id #删除容器 docker image rm 镜像ID #删除镜像 但是,还可以借助这两个获取容器ID和镜像ID的命令实现批量删除 获取容器ID列表: docker container ls -a -q 获取镜像ID列表: docker image ls -a -q 最终实现批量删除命令 批量删除容器: docker container rm $(