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

继上一篇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有又能够自动识别主键的机制。

原文地址:https://www.cnblogs.com/chanyuli/p/11722061.html

时间: 2024-08-16 16:50:30

继上一篇Django的数据库数据的编辑和删除的相关文章

19 MySQL概念 数据库 数据表 数据类型 增加删除修改查询 WHERE Order By Limit

数据库管理系统DBMS 数据库中相关概念 数据库 数据表 记录 字段 数据 登录和退出MySQL客户端 查询自己的MySQL服务器有几个数据库 二.退出MySQL客户端的命令 修改root用户的密码 在MySQL客户端来修改密码(当前账号的密码) 数据库操作 创建数据库 显示所有数据库 删除数据库 选择数据库 更改数据库默认字符集 数据表操作 显示当前数据库中的所有表 创建数据表 显示表的创建 列的常用属性 修改数据表 删除数据表 显示表结构 MySQL数据类型 整型 浮点型 字符型 文本型 日

django取数据库数据转成list或者字典dict

问题: 想将从数据库取出的数据转成自己想要的格式. 取出的数据是QuerySet对象 info = testcase_info.objects.filter(id=db_id)取出的不是对象,不能直接取到表中具体字段的值. info = testcase_info.objects.get(id=db_id)通过get可以直接取到对象,然后后面就轻松了. 还有注意的是,取到的字段数据都是str类型的,想要变成list或者dict都需要自己再做处理.下面代码是一个处理的例子: ls = [] inf

继上一篇:获取非行间样式,此处有兼容问题

html格式: <body> <div id="div1" style="width:200px; height:200px; background:red;"> </div> js代码: window.onload=function () { var oDiv=document.getElementById('div1'); //alert(oDiv.style.width);     //style只能用来获取行间样式 //I

安装php rabbitmq扩展,继上一篇安装Rabbitmq

1 安装 rabbitmq-c,C 与 RabbitMQ 通信需要依赖这个库,这里只贴出正确的步骤,错误类型太多,不一一举例,大部分都是安装问题,缺少组件,安装目录问题 git clone git://github.com/alanxz/rabbitmq-c.git cd rabbitmq-c mkdir build && cd build #这一步是在rabbitmq-c的根目录下创建一个build子目录 # 这一步是让cmake根据../CMakeList.txt,即rabbitmq-

Django获取数据库数据时根据id筛选

filter(id__in=models.Teacher.objects.all()[0:5]) teacher_list = models.Teacher.objects.filter(id__in=models.Teacher.objects.all()[0:5]).values('id', 'name', 'cls__id', 'cls__caption') 原文地址:https://www.cnblogs.com/jiefangzhe/p/10773478.html

PHP插入数据库代码,编辑,删除

插入代码 view plaincopy <? $action=$_GET['action']; switch($action){ //添加记录 case"add"; $mail = trim(htmlspecialchars($_POST["mail"])); $username = trim(htmlspecialchars($_POST["username"])); $tel = trim(htmlspecialchars($_POST

[python][django学习篇][4]django完成数据库代码翻译:迁移数据库(migration)

上一篇我们已经完成数据库的设计,但是仅仅是python语言,并没有真正创建了数据库表.翻译成数据库语言,真正创建数据库表由django manage.py来实现,这一过程专业术语:迁移数据库 切换到manage.py所在目录,分别执行命令:python manage.py makemigrations , python manage.py migrate 执行python manage.py makemigrations结果 F:\pythoncode\django\workspace\blog

php+sql创建本地项目详细步骤3——查看与删除数据库数据

直接上代码,查看上一篇中插入的数据 <?php include 'dblink.php'; $sql="select * from shoes_jd_wx"; $rs=mysql_query($sql); //执行sql语句,获得结果集. $arr=array(); while($ro=mysql_fetch_array($rs)){//从结果集中获取一行记录作为关联数组. $arr[]=$ro; } ?> <html> <head> <met

Ubuntu上更改MySQL数据库数据存储目录

之前写过一篇博客"MySQL更改数据库数据存储目录",当时的测试环境是RHEL和CentOS,谁想最近在Ubuntu下面更改MySQL数据库数据存储目录时遇到了之前未遇到的问题,之前的经验用不上了(或者说之前的总结不是太全面),修改完MySQL数据库数据存储目录后重启MySQL,发现MySQL服务无法启动. [email protected]:/etc/mysql/mysql.conf.d# service mysql start   Job for mysql.service fai