ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

继上一篇Django的数据库数据的编辑和删除

2019-10-22 19:54:41  阅读:221  来源: 互联网

标签:删除 edit 数据库 request 继上 user Django 数据 id


继上一篇Django的数据库数据的编辑和删除

首先需要写一个能够展示数据库一张表中所有数据的 html 页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
</head>
<body>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <h1 class="text-center">数据展示</h1>
            <table class="table table-hover table-striped table-bordered">
                <thead>
                    <tr >
                        <th>主键值</th>
                        <th>用户名</th>
                        <th>密码</th>
                        <th class="text-center">操作</th>
                    </tr>
                </thead>
                <tbody>
                    {% for user_obj in user_queryset %}
                        <tr>
                            <td>{{ user_obj.id }}</td>
                            <td>{{ user_obj.username }}</td>
                            <td>{{ user_obj.password }}</td>
                            <td class="text-center">
                                <a href="/edit_user/?edit_id={{ user_obj.id }}" class="btn btn-primary btn-sm">编辑</a>
                                <a href="/delete_user/?delete_id={{ user_obj.pk }}" class="btn btn-danger btn-sm">删除</a>
                            </td>
                        </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>
</body>
</html>

上面的两个 a 标签,一个是编辑一个是删除,点击会跳转到对应的 html 页面。

注意: href 里的链接,一定要在前面加上一个 "/" ,这样他的跳转才会是‘’http://127.0.0.1:8001/edit_user/?edit_id=1‘’ ,如果你没有加上斜杆,点击将会失效,每次点击都会拼接上一个edit_user,而不会跳转到对应的 html 界面。

views 里的业务逻辑:

def userlist(request):
    # 获取用户表中的所有的数据
    user_queryset = models.Userinfo.objects.all()  # 结果类似于列表套数据对象 里面是当前表的所有数据对象
    # print(user_queryset.query)  # 只有queryset对象才能够点query查询内部所对应的sql语句
    # print(user_queryset)
    # 将数据传递给前端页面展示给用户看
    return render(request,'userlist.html',locals())

这里会把所有的数据都传到前端,前端展示。

当用户点击了编辑以后,就会跳转到编辑界面,以下是编辑的逻辑代码:

def edit_user(request):
    # 1.如何获取用户想要编辑的数据
    edit_id = request.GET.get('edit_id')
    if request.method == 'POST':
        # 将用户新修改的所有的数据
        username = request.POST.get("username")
        password = request.POST.get("password")
        """POST中也是可以获取GET请求携带的参数"""
        # 去数据库中修改对应的数据
        # 方式1:
           models.Userinfo.objects.filter(pk=edit_id).update(username=username,password=password)                                       
          
            # 批量更新
        # 方式2: 获取当前数据对象 然后利用对象点属性的方式 先修改数据  然后调用对象方法保存
        # 不推荐你使用第二种方式  效率低   挨个重新写入一遍
        # edit_obj = models.Userinfo.objects.filter(pk=edit_id).first()  # pk能够自动帮你查询出当前表的主键字段名
        # edit_obj.username = username
        # edit_obj.password = password
        # edit_obj.save()
        """update方法会将filter查询出来的queryset对象中所有的数据对象全部更新"""
        # 跳转到数据展示页面
        return redirect('/user_list')
    # 2.根据主键值去数据库中查询出当前对象 展示给用户看
    edit_obj = models.Userinfo.objects.filter(pk=edit_id).first()  # pk能够自动帮你查询出当前表的主键字段名
    # 3.将查询出来的数据对象传递给前端页面 展示给用户看
    return render(request,'edit_user.html',locals())

获取到前端传来的数据之后,直接查询,然后修改,最后在重定向到userlist界面

编辑界面前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>

</head>
<body>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <h2 class="text-center">编辑页面</h2>
            <form action="" method="post">
                username:<input type="text" class="form-control" name="username" value="{{ edit_obj.username }}">

                password:<input type="text" class="form-control" name="password" value="{{ edit_obj.password }}">

                <br>
                <input type="submit" class="btn btn-warning">
            </form>

        </div>
    </div>
</div>
</body>
</html>

通过submit向后端发送数据,然后后端(也就是上面的逻辑代码)进行处理修改,最后在重定向到展示界面,这时候数据已经修改了。

删除的业务逻辑:

def delete_user(request):
    # 获取想要删除的数据id 直接删除
    delete_id = request.GET.get('delete_id')
    models.Userinfo.objects.filter(pk=delete_id).delete()  # 批量删除
    return redirect('/userlist')

在user_list界面点击了删除按钮以后,会调用 delete_user方法,删除之后重定向。

这里要注意:每次点击删除按键,都相当于删除了数据库中的相关记录,并且重定向到这个页面,也就相当于刷新了页面。

user_list 界面有很多条数据,也有很多个编辑、删除按键,那么怎么样才能让后端知道我们要操作的是哪一条数据呢?

答:因为我们在user_list里面传了一个列表套数据到前端去,所以前端可以直接获取每条记录的id值,那么前端获取了每一个id之后,把它和每个编辑以及删除一一对应,也就是a标签里的url,所以每个后端逻辑代码都可以接收到唯一的id值,就可以进行操作了。

值得一提的是,也是重点,pk等于id,并且推荐用pk,Django有又能够自动识别主键的机制。

标签:删除,edit,数据库,request,继上,user,Django,数据,id
来源: https://www.cnblogs.com/chanyuli/p/11722061.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有