Django 实现增删改查、登录功能

******************************华丽分割线******************************

一、【实现注册功能】

1、先建立注册表,在django项目下找到对应App下的models.py,如下图

2、在models.py编写注册所需要的字段信息,并同步到数据库,如下图:

     1)python manage.py  makemigration  App名称

     2)python manage.py makemigration

     3)python manage.py migrate

执行成功后,如果没报错的话,就表示数据库创建成功,查看数据库表,如下图:

创建成功后,migrate文件下下也会有对应的相关文件,如下图:

 

废话这么久了,准备工作也差不多了,开始在前端页面编辑表单并提交,如下图:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <link href="http://v3.bootcss.com/examples/signin/signin.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
    <script src="http://v3.bootcss.com/assets/js/ie-emulation-modes-warning.js"></script>
    <script src="http://v3.bootcss.com/assets/js/ie10-viewport-bug-workaround.js"></script>
</head>
<body>

<div class="container">
    <form class="form-signin " action="adduser" method="post">

        <input type="hidden" name="mark" value="1">
        <label class="">账号:</label> <label style="color: red;">*</label>
        <input type="text" name="user_name" class="form-control" placeholder="Username" required>
        <label class="">密码:</label> <label style="color: red;">*</label>
        <input type="password" name="user_password" class="form-control" placeholder="Password" required>

        <label class="">邮箱:</label> <label style="color: red;">*</label>
        <input type="email" name="user_email" class="form-control" placeholder="email" required>

        <label class="">手机号码:</label> <label style="color: red;">*</label>
        <input type="text" name="user_numbers" class="form-control" placeholder="number" required>

        <label class="">地址:</label>
        <textarea rows="3" name="user_address" class="form-control"> </textarea>

        <label class="">身份证号:</label>
        <input type="text" name="user_cards" class="form-control">
        <br>
        <button class="btn btn-lg btn-primary btn-block" type="submit">提交</button>
        {#        <button class="btn btn-lg btn-success btn-block" type="button" οnclick="return openPage()";>注册</button>#}
        <button class="btn-block btn-success btn-lg text-center" οnclick="history.back()">返回</button>
    </form>
</div> <!-- /container -->
</body>
</html>

页面效果如下图:

1、填写完必填项后,进行提交,指定form表单method='post'  action='adduser'

PS:action 指定调整会在urls.py路由中分配,如下图:

指定到views(业务逻辑处理)中的add_user方法进行处理,如下图:

'''添加注册信息'''


def add_user(request):
    if request.method == "POST":
        print request.POST
        mark = request.POST["mark"]
        username = request.POST["user_name"]
        password = request.POST["user_password"]
        email = request.POST["user_email"]
        address = request.POST["user_address"]
        cards = request.POST["user_cards"]
        numbers = request.POST["user_numbers"]
        # print username, password, email, address, cards, numbers
        models.User.objects.create(user_name=username, user_password=password, user_email=email, user_address=address,
                                   user_cards=cards, user_numbers=numbers)
        print u"注册成功!"
        if mark == "0":
            lists = models.User.objects.filter().all()  # order_by('?')[0:4] 切片随机取4条数据
            context = {
                "user_list": lists

            }
            return render(request, "home.html", context=context)
        else:
            context = {
                'context': u"注册成功请登录!"
            }
            return render(request, "login.html", context=context)

添加完成后,我们render渲染login.html页面:return render(request, "login.html", context=context)

到这里,我们的注册功能就已经完成了。

******************************华丽分割线******************************

二、【实现登录功能】

1、上代码,如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../favicon.ico">
    <title>请您登录</title>
    <link href="http://v3.bootcss.com/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">
    <link href="http://v3.bootcss.com/examples/signin/signin.css" rel="stylesheet">
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <script src="http://v3.bootcss.com/assets/js/ie-emulation-modes-warning.js"></script>
    <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
    <![endif]-->
</head>
<body>

<div class="container">
    <form class="form-signin " action="test-url-login" method="post">
        {% if context %}
            <div class="alert alert-warning">
                <a href="#" class="close" data-dismiss="alert">
                    &times;
                </a>
                <strong>{{ context }}</strong>
            </div>
        {% else %}
        {% endif %}
        <h2 class="form-signin-heading"></h2>
        <label for="inputEmail" class="sr-only">账号:</label>
        <input type="text" name="user_name" class="form-control" placeholder="Username" required>
        <label for="inputPassword" class="sr-only">密码:</label>
        <input type="password" name="user_pwd" class="form-control" placeholder="Password" required>
        <div class="checkbox">
            <label>
                <input type="checkbox" value="remember-me"> 记住我
                <label>
                    <a>忘记密码?</a>
                </label>
            </label>
        </div>
        <button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>
        <a class="btn-block btn-success btn-lg text-center" href="{% url 'test-url-register' %}">注册</a>
    </form>

</div>
<script src="http://v3.bootcss.com/assets/js/ie10-viewport-bug-workaround.js"></script>
<script type="text/javascript">
    function openPage() {
        window.location.href = "/register.html";
    }
</script>
</body>
</html>

由于也是一个form表单,我们就直接submit,action="test-url-login" method="post"  

action指定是的test-url-login 这个url路径,那么我们就去urls.py中去配置,见图:

from django.conf.urls import url
from django.contrib import admin

import testmodel.views as views

urlpatterns = [
    url(r'adduser', views.add_user),  # 注册页面,添加用户信息
    url(r'test-url-login', views.user_login, name="test-url-login"),  # 登录请求页面

在views.py中找到新建一个user_login方法,如下图:

'''登录页面'''


def user_login(request):
    if request.POST:
        user_name = request.POST["user_name"]
        user_pwd = request.POST["user_pwd"]
        print request.POST
        # 获取的表单数据与数据库进行比较
        user = models.User.objects.filter(user_name__exact=user_name, user_password__exact=user_pwd)
        # 查询全部人员信息
        user_list = models.User.objects.filter().all()
        print "user_list%s=" % user_list
        if user:
            context = {
                'context': u"登录成功",
                'user': user_name,
                'user_list': user_list
            }
            return render(request, "home.html", context=context)
        else:
            context = {
                'context': u"登录不成功,请检查账号、密码是否正确!"
            }
            return render(request, "login.html", context=context)
    return render(request, "login.html")

这里要注意的是:django与以往的java处理方式不一样,例如:models.User.objects.filter(user_name__exact=user_name, user_password__exact=user_pwd),

在这里我提一下django的各种查询条件的关键字:如下

# Django 各种条件查询关键字
# __exact  精确等于 like ‘aaa’
# __iexact 精确等于 忽略大小写 ilike 'aaa'
# __contains 包含like '%aaa%'
# __icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
# __gt  大于
# __gte 大于等于
# __lt 小于
# __lte 小于等于
# __in 存在于一个list范围内
# __startswith 以…开头
# __istartswith 以…开头 忽略大小写
# __endswith 以…结尾
# __iendswith 以…结尾,忽略大小写
# __range 在…范围内
# __year 日期字段的年份
# __month 日期字段的月份
# __day 日期字段的日
# __isnull=True/False

就是查询数据库有没有已经存在的账号名和密码,如果已经存在,那么就登录成功,我们定义一个字典context,登录成功需要传到home.html中,如下:

if user:
    context = {
        'context': u"登录成功",
        'user': user_name,
        'user_list': user_list
    }
    return render(request, "home.html", context=context)

如果输入错误的账号密码,我们就定义一句话响应给前端并在前端显示。

后台代码:

else:
    context = {
        'context': u"登录不成功,请检查账号、密码是否正确!"
    }
    return render(request, "login.html", context=context)

前端代码:

{% if context %}
    <div class="alert alert-warning">
        <a href="#" class="close" data-dismiss="alert">
            &times;
        </a>
        <strong>{{ context }}</strong>
    </div>
{% else %}
{% endif %}

运行效果如下。

输入正确的账号、密码,点击登录,则跳转到home.html页面,如下图:

附home.html代码,如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../favicon.ico">

    <title>客户关系管理系统</title>
    <!-- Bootstrap core CSS -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <link href="http://v3.bootcss.com/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">
    <!-- Custom styles for this template -->
    <link href="http://v3.bootcss.com/examples/justified-nav/justified-nav.css" rel="stylesheet">

    <link href="http://cdn.bootcss.com/toastr.js/latest/css/toastr.min.css" ref="stylesheet">
    <link href="http://cdn.bootcss.com/toastr.js/latest/css/toastr.css" ref="stylesheet">
    <script src="http://cdn.bootcss.com/toastr.js/latest/js/toastr.min.js"></script>
    <script src="http://cdn.bootcss.com/toastr.js/latest/toastr.min.js"></script>

    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <script src="http://v3.bootcss.com/assets/js/ie-emulation-modes-warning.js"></script>
    <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
    <script src="http://v3.bootcss.com/assets/js/ie10-viewport-bug-workaround.js"></script>


    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>

    <![endif]-->

</head>
<body>

<script type="text/javascript">

    {#    toastr.error("Error");#}
    {#    toastr.warning("只能选择一行进行编辑");#}
    {#    toastr.info("info");#}


    function deleteUser(id) {
        if (window.confirm("您确认删除该条记录吗?")) {
            var post_data = {
                "userid": id
            };

            $.ajax({
                url: 'user_delete',
                type: 'POST',
                data: post_data,
                dataType: 'json',
                success: function (data) {
                    alert(data["status"]);
                    window.location.reload(true);
                    //window.location.reload(true); //数据删除后,进行页面刷新
                    //window.location.reload(true);
                }

            });
        } else {

        }

    }

    //注册新增按钮的事件
    function addinfo() {
        $("#myModalLabel").text("新增");
        $("#myModal").modal();
    }


    function close() {
        $("#myModal").window.close();
    }


    $("#selectAll").click(function () {
        alert("22121");
    })

    //批量选择checkbox
    function seltAll() {
        var chckBoxSign = document.getElementById("selectAll");       //ckb 全选/反选的选择框id
        var chckBox = document.getElementsByName("chckBox");    //所有的选择框其那么都是chckBox
        var num = chckBox.length;
        if (chckBoxSign.checked) {
            for (var index = 0; index < num; index++) {
                chckBox[index].checked = true;
            }
        } else {
            for (var index = 0; index < num; index++) {
                chckBox[index].checked = false;
            }
        }
    }

    //批量删除数据
    function deleteSelect() {
        var chckBox = document.getElementsByName("chckBox");
        var num = chckBox.length
        var ids = "";
        for (var index = 0; index < num; index++) {
            if (chckBox[index].checked) {
                ids += chckBox[index].value + ",";
            }
        }
        if (ids != "") {
            ids = ids.substring(0, ids.length - 1); //S 删除字符串最后一个字符的几种方法
            ids = {
                'ids': ids
            }
            if (window.confirm("确定删除所选记录?")) {
                $.ajax({
                    type: "post",
                    url: 'deledeSelect', //要自行删除的action
                    data: ids,
                    dataType: 'json',
                    success: function (data) {
                        if (data["success"]) {
                            alert("删除成功");
                            window.location.reload(true);
                        }
                    },
                    error: function (data) {
                        alert("系统错误,删除失败");
                    }
                });
            }
        } else {
            alert("请选择要删除的记录");
        }
    }


    //清空查询条件
    function empty(){
        $("#user_name").val("");
        $("#user_email").val("");
        $("#user_address").val("");
        $("#user_cards").val("");
        $("#user_numbers").val("");
        $("#datetime_picker").val("");
        $("#datetime_end").val("");
    }



</script>

<div class="container">
    <!-- The justified navigation menu is meant for single line per list item.
         Multiple lines will require custom code not provided by Bootstrap. -->
    <div class="masthead">

        <h4 style="color: red">欢迎您, {{ user }} &nbsp;<a href="{% url 'home_url_login' %}">注销</a></h4>

        <nav>
            <ul class="nav nav-justified ">
                <li class="active"><a href="#">人员管理</a></li>
                <li><a href="#">项目管理</a></li>
                <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">评审管理</a>
                    <ul class="dropdown-menu">
                        <li>11</li>
                        <li>11</li>
                        <li>11</li>
                        <li>11</li>
                    </ul>
                </li>
                <li><a href="#">客户管理</a></li>
                <li><a href="#">报表管理</a></li>
                <li><a href="#">系统管理</a></li>
            </ul>
        </nav>
    </div>


    <div>
        <table class="table table-bordered">
            <tr>
                <td style="width: auto">姓名:</td>
                <td class="text-left" style="width: auto"><input type="text" name="user_name" id="user_name"></td>
                <td>Email:</td>
                <td class="text-left"><input type="text" name="user_email" id="user_email"></td>
                <td>地址:</td>
                <td class="text-left"><input type="text" name="user_address" id="user_address"></td>
            </tr>

            <tr>
                <td style="width: auto">身份证号:</td>
                <td class="text-left"><input type="text" name="user_cards" id="user_cards"></td>
                <td>手机号码:</td>
                <td class="text-left"><input type="text" name="user_numbers" id="user_numbers"></td>
                <td>创建时间:</td>
                <td class="text-left">
                    <input type="text" name="user_numbers" id="datetime_picker" data-date-format="yyyy-mm-dd hh:ii"
                           style="width: auto" id="datetime_picker"> -
                    <input type="text" name="user_numbers" style="width: auto" id="datetime_end"></td>
            </tr>
        </table>
        <div class="text-center">
            <button type="button" class="btn btn-info" οnclick="addinfo()">
                <span class="glyphicon glyphicon-file">新增</span>
            </button>

            <a type="button" class="btn btn-danger" οnclick="deleteSelect();">
                <span class="glyphicon glyphicon-remove">删除</span>
            </a>

            <button type="button" class="btn btn-success ">
                <span class="glyphicon glyphicon-search">查询</span>
            </button>

            <button type="button" class="btn btn-primary" οnclick="empty();">
                <span class="glyphicon glyphicon-trash">清空</span>
            </button>

            <button type="button" class="btn btn-info">
                <span class="glyphicon glyphicon-save">导出</span>
            </button>

            <div>
                <br>
            </div>
            <div style="width:100%;">

                <table class="table text-left">
                    <thead>
                    <tr class="alert alert-success">
                        <strong>
                            <th><input type="checkbox" id="selectAll" οnclick="seltAll();"></th>
                            <th>姓名</th>
                            <th>密码</th>
                            <th>Email</th>
                            <th>地址</th>
                            <th>身份证号</th>
                            <th>手机号码</th>
                            <th>操作</th>
                        </strong>
                    </tr>
                    </thead>
                    <thead>
                    {% for foo in user_list %}
                        <tr class="alert-info">
                            <td ><input type="checkbox" value="{{ foo.id }}" name="chckBox"></td>
                            <td>{{ foo.user_name }}</td>
                            <td>{{ foo.user_password }}</td>
                            <td> {{ foo.user_email }}</td>
                            <td> {{ foo.user_address }}</td>
                            <td> {{ foo.user_cards }}</td>
                            <td> {{ foo.user_numbers }}</td>
                            <td>
                                <strong><a href="#">修改</a></strong>
                                <strong> <a href="#" οnclick="deleteUser({{ foo.id }})">删除</a></strong>
                            </td>
                        </tr>
                    {% endfor %}
                    </thead>


                </table>
                <ul class="pagination pagination-lg">
                    <li><a>首页</a></li>
                    <li><a>></a></li>
                    <li class="disabled"><a>1</a></li>
                    <li><a>2</a></li>
                    <li><a>3</a></li>
                    <li><a>4</a></li>
                    <li><a>5</a></li>
                    <li><a><</a></li>
                    <li><a>尾页</a></li>
                </ul>
            </div>
        </div>

        <!-- Jumbotron -->
        <div class="jumbotron">
            {#        <h1>Marketing stuff!</h1>#}
            <p><a class="btn btn-lg btn-success" href="#" role="button">Good...</a></p>
        </div>

        <!-- Example row of columns -->
        <div class="row">

        </div>
        {#      <div class="row">#}
        {#        <div class="col-lg-4">#}
        {#          <h2>Safari bug warning!</h2>#}
        {#          <p class="text-danger">As of v9.1.2, Safari exhibits a bug in which resizing your browser horizontally causes rendering errors in the justified nav that are cleared upon refreshing.</p>#}
        {#          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>#}
        {#          <p><a class="btn btn-primary" href="#" role="button">View details &raquo;</a></p>#}
        {#        </div>#}
        {#        <div class="col-lg-4">#}
        {#          <h2>Heading</h2>#}
        {#          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>#}
        {#          <p><a class="btn btn-primary" href="#" role="button">View details &raquo;</a></p>#}
        {#       </div>#}
        {#        <div class="col-lg-4">#}
        {#          <h2>Heading</h2>#}
        {#          <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.</p>#}
        {#          <p><a class="btn btn-primary" href="#" role="button">View details &raquo;</a></p>#}
        {#        </div>#}
        {#      </div>#}

        <!-- Site footer -->
    </div> <!-- /container -->

    <div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
                            aria-hidden="true">×</span></button>
                    <h4 class="modal-title" id="myModalLabel">新增</h4>
                </div>
                <form class="form-signin " action="adduser" method="post">
                    <input type="hidden" name="mark" value="0">
                    <label class="">账号:</label> <label style="color: red;">*</label>
                    <input type="text" name="user_name" class="form-control" placeholder="Username"
                           required>
                    <label class="">密码:</label> <label style="color: red;">*</label>
                    <input type="password" name="user_password" class="form-control" placeholder="Password"
                           required>

                    <label class="">邮箱:</label> <label style="color: red;">*</label>
                    <input type="email" name="user_email" class="form-control" placeholder="email" required>

                    <label class="">手机号码:</label> <label style="color: red;">*</label>
                    <input type="text" name="user_numbers" class="form-control" placeholder="number"
                           required>

                    <label class="">地址:</label>
                    <textarea rows="3" name="user_address" class="form-control"> </textarea>

                    <label class="">身份证号:</label>
                    <input type="text" name="user_cards" class="form-control">

                    <br>
                    <button class="btn btn-lg btn-primary btn-block" type="submit">提交</button>
                    <button class="btn-block btn-success btn-lg text-center" type="button" οnclick="close();">关闭
                    </button>
                </form>
            </div>
        </div>
    </div>
</div>
</div>

</body>
</html>

登录功能,也就完成了。

******************************华丽分割线******************************

三、【实现列表查询功能】

在登录成功的时候我就查询了数据库,并把结果一并传给了前端,上代码,如图:

# 查询全部人员信息
user_list = models.User.objects.filter().all()
print "user_list%s=" % user_list
if user:
    context = {
        'context': u"登录成功",
        'user': user_name,
        'user_list': user_list
    }
    return render(request, "home.html", context=context)

那我们在前端(home.html)页面进行迭代显示,见代码:

<table class="table text-left">
    <thead>
    <tr class="alert alert-success">
        <strong>
            <th><input type="checkbox" id="selectAll" οnclick="seltAll();"></th>
            <th>姓名</th>
            <th>密码</th>
            <th>Email</th>
            <th>地址</th>
            <th>身份证号</th>
            <th>手机号码</th>
            <th>操作</th>
        </strong>
    </tr>
    </thead>
    <thead>
    {% for foo in user_list %}
        <tr class="alert-info">
            <td ><input type="checkbox" value="{{ foo.id }}" name="chckBox"></td>
            <td>{{ foo.user_name }}</td>
            <td>{{ foo.user_password }}</td>
            <td> {{ foo.user_email }}</td>
            <td> {{ foo.user_address }}</td>
            <td> {{ foo.user_cards }}</td>
            <td> {{ foo.user_numbers }}</td>
            <td>
                <strong><a href="#">修改</a></strong>
                <strong> <a href="#" οnclick="deleteUser({{ foo.id }})">删除</a></strong>
            </td>
        </tr>
    {% endfor %}
    </thead>
</table>

页面效果如下:

******************************华丽分割线******************************

四、【实现删除功能】--单个删除与批量删除功能

{% for foo in user_list %}
    <tr class="alert-info">
        <td ><input type="checkbox" value="{{ foo.id }}" name="chckBox"></td>
        <td>{{ foo.user_name }}</td>
        <td>{{ foo.user_password }}</td>
        <td> {{ foo.user_email }}</td>
        <td> {{ foo.user_address }}</td>
        <td> {{ foo.user_cards }}</td>
        <td> {{ foo.user_numbers }}</td>
        <td>
            <strong><a href="#">修改</a></strong>
            <strong> <a href="#" οnclick="deleteUser({{ foo.id }})">删除</a></strong>
        </td>
    </tr>
{% endfor %}

在遍历的列中,加入deleteUser方法,并把id传进去,见代码:

function deleteUser(id) {
    if (window.confirm("您确认删除该条记录吗?")) {
        var post_data = {
            "userid": id
        };
        $.ajax({
            url: 'user_delete',
            type: 'POST',
            data: post_data,
            dataType: 'json',
            success: function (data) {
                alert(data["status"]);
                window.location.reload(true);//数据删除后,进行页面刷新
            }
        });
    } else {
        alert("删除失败");
    }
}

在urls.py创建对应的路由名称,如下:

from django.conf.urls import url
from django.contrib import admin

import testmodel.views as views

urlpatterns = [
    url(r'adduser', views.add_user),  # 注册页面,添加用户信息
    url(r'test-url-login', views.user_login, name="test-url-login"),  # 登录请求页面
    url(r'user_delete', views.user_delete, name='user_delete'),  # 删除数据

在views创建user_delete方法,如下:

'''删除数据'''


def user_delete(request):
    if request.method == "POST":
        userid = request.POST.get('userid')
        print "id = %s" % userid
        status = "删除成功!"
        result = "Error!"
        deletesql = models.User.objects.filter(id=userid)  # 执行删除操作
        if deletesql.delete():
            return HttpResponse(json.dumps({
                "status": status
            }))
        else:
            return HttpResponse(json.dumps({
                "result": result
            }))

效果如下:

 

实现批量删除:

//批量选择checkbox
function seltAll() {
    var chckBoxSign = document.getElementById("selectAll");       //ckb 全选/反选的选择框id
    var chckBox = document.getElementsByName("chckBox");    //所有的选择框其那么都是chckBox
    var num = chckBox.length;
    if (chckBoxSign.checked) {
        for (var index = 0; index < num; index++) {
            chckBox[index].checked = true;
        }
    } else {
        for (var index = 0; index < num; index++) {
            chckBox[index].checked = false;
        }
    }
}

 

//批量删除数据
function deleteSelect() {
    var chckBox = document.getElementsByName("chckBox");
    var num = chckBox.length
    var ids = "";
    for (var index = 0; index < num; index++) {
        if (chckBox[index].checked) {
            ids += chckBox[index].value + ",";
        }
    }
    if (ids != "") {
        ids = ids.substring(0, ids.length - 1); //S 删除字符串最后一个字符的几种方法
        ids = {
            'ids': ids
        }
        if (window.confirm("确定删除所选记录?")) {
            $.ajax({
                type: "post",
                url: 'deledeSelect', //要自行删除的action
                data: ids,
                dataType: 'json',
                success: function (data) {
                    if (data["success"]) {
                        alert("删除成功");
                        window.location.reload(true);
                    }
                },
                error: function (data) {
                    alert("系统错误,删除失败");
                }
            });
        }
    } else {
        alert("请选择要删除的记录");
    }
}

 

<a type="button" class="btn btn-danger" οnclick="deleteSelect();">
    <span class="glyphicon glyphicon-remove">删除</span>
</a>

 

在urls.py创建指定路由deledeSelect

url(r'adduser', views.add_user),  # 注册页面,添加用户信息
url(r'test-url-login', views.user_login, name="test-url-login"),  # 登录请求页面
url(r'user_delete', views.user_delete, name='user_delete'),  # 删除数据
url(r'deledeSelect', views.deleteSelect),  # 批量删除

并在views.py中创建方法:deleteSelect

'''批量删除'''


def deleteSelect(request):
    print '开始进行批量删除!'
    ids = request.POST["ids"]
    print ids
    # idstring = ','.join(ids)
    deletesql = models.User.objects.extra(where=['id in (' + ids + ')'])
    context = {
        "success": '删除成功',
        "error": '删除失败'
    }
    if deletesql.delete():
        # return render(request, "home.html", context=context)
        return HttpResponse(json.dumps({
            "success": '删除成功'
        }))
    else:
        return HttpResponse(json.dumps({
            "error": '删除失败'
        }))

 

 

====================================================================================

对数据进行增删改查

models.UserInfo.objects.all() #查询全部

models.UserInfo.objects.all().values('user')    #只取user列

models.UserInfo.objects.all().values_list('id','user')    #取出id和user列,并生成一个列表

models.UserInfo.objects.get(id=1) #跟进ID进行查询

models.UserInfo.objects.get(user='yangmv') #跟进用户进行查询

成功获取数据

 

 

models.UserInfo.objects.create(user='yangmv',pwd='123456')

或者

obj = models.UserInfo(user='yangmv',pwd='123456')

obj.save()

或者

dic = {'user':'yangmv','pwd':'123456'}

models.UserInfo.objects.create(**dic)

 

 

 

models.UserInfo.objects.filter(user='yangmv').delete()

 

 

 

models.UserInfo.objects.filter(user='yangmv').update(pwd='520')

或者

obj = models.UserInfo.objects.get(user='yangmv')

obj.pwd = '520'

obj.save()

 

 

 

转载于:https://my.oschina.net/u/3222944/blog/1509913

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值