【玩转全栈】----用户管理案例

目录

案例需求:

成果显示:

源码展示:

部分源码解释及注意

1、info_list.html文件

2、info_add.html文件

3、models.py文件

4、views.py文件


经过前面的学习,相信您对Django、MySQL,以及他们之间的连接已经非常熟悉了,本文是一个关于Django、MySQL的一个小案例

案例需求:

设计一个表,包括姓名、密码、年龄,需要在页面上显示表中信息,并增加添加和删除按钮,点击添加按钮跳转至添加页面,输入内容后表中自动更新,点击删除后,自动删除该行表内容。

功能很简单,大家可以自己先试试

成果显示:

显示数据表

添加数据:

点击提交,数据库更新:

删除数据:

点击删除更新数据表:

源码展示:

url.py文件

python 复制代码
# 用户管理
path("info/list/",views.info_list),
# 添加用户
path("info/add/",views.info_add),
# 删除用户
path("info/delete/",views.info_delete),

models.py文件

python 复制代码
class UserInfo(models.Model): 
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

views.py文件

python 复制代码
from app01.models import Department,UserInfo

def info_list(requests):
    # 1、获取数据库中所有的用户信息
    data_list = UserInfo.objects.all()
    return render(requests,"info_list.html",{"data_list":data_list})

# 添加用户
def info_add(req):
    if req.method == "GET":
        return render(req,"info_add.html")
    # 获取用户提交的数据
    name = req.POST.get('name')
    password = req.POST.get('pwd')
    age = req.POST.get('age')
    # 添加到数据库
    UserInfo.objects.create(name=name,password=password,age=age)
    # 正常跳转到其他页面需要在前面加一些东西,本机网址就不用加
    return redirect("/info/list")

# 删除用户
def info_delete(req):
    nid = req.GET.get('nid')
    UserInfo.objects.filter(id=nid).delete()
    return redirect("/info/list")

info_list.html文件

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>用户表</h1>
<!--添加一个a标签按钮,实现跳转-->
<a href="/info/add/">添加</a>
<table border="1">
    <thead>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>密码</th>
            <th>年龄</th>
            <th>删除</th>
        </tr>
    </thead>
    <tbody>
    {% for item in data_list %}
        <tr>
            <td>{{item.id}}</td>
            <td>{{item.name}}</td>
            <td>{{item.password}}</td>
            <td>{{item.age}}</td>
            <td>
                <a href="/info/delete/?nid={{item.id}}">删除</a>
            </td>
        </tr>
    {% endfor %}
    </tbody>
</table>

</body>
</html>

info_add.html文件

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>添加用户</h1>
    <form method="POST">
        {% csrf_token %}
        <input type="text" name="name" placeholder="用户名">
        <input type="text" name="pwd" placeholder="密码">
        <input type="text" name="age" placeholder="年龄">
        <input type="submit" value="提交">
    </form>
</body>
</html>

部分源码解释及注意

1、info_list.html文件

添加了一个a,标签,点击跳转到添加用户页面,实现页面间的跳转

html 复制代码
<a href="/info/add/">添加</a>

使用for循环获取数据表中的id、name、password、age等内容

html 复制代码
{% for item in data_list %}
        <tr>
            <td>{{item.id}}</td>
            <td>{{item.name}}</td>
            <td>{{item.password}}</td>
            <td>{{item.age}}</td>
            <td>
                <a href="/info/delete/?nid={{item.id}}">删除</a>
            </td>
        </tr>
{% endfor %}

添加了一个删除按钮,点击后跳转至对应行的id删除页面,自动删除,本机上输入url路径可以不用输入前面的http://127.0.0.1:8000/

html 复制代码
/info/delete/?nid={{item.id}}

2、info_add.html文件

输入框记得添加Django独有的安全验证

html 复制代码
{% csrf_token %}

3、models.py文件

创建的表和之前的一样,大家也可以自己设计个表

4、views.py文件

记得引入建立的数据类

python 复制代码
from app01.models import UserInfo

info_list函数用来获取数据库内容,并传给html文件

python 复制代码
def info_list(requests):
    # 1、获取数据库中所有的用户信息
    data_list = UserInfo.objects.all()
    return render(requests,"info_list.html",{"data_list":data_list})

记得settings中要连接数据库!

info_add函数对应表单提交的POST请求,通过变量接收,再用mysqlclient写代码存入数据库中,再重定向至数据表显示页面

python 复制代码
def info_add(req):
    if req.method == "GET":
        return render(req,"info_add.html")
    # 获取用户提交的数据
    name = req.POST.get('name')
    password = req.POST.get('pwd')
    age = req.POST.get('age')
    # 添加到数据库
    UserInfo.objects.create(name=name,password=password,age=age)
    # 正常跳转到其他页面需要在前面加一些东西,本机网址就不用加
    return redirect("/info/list")
复制代码
info_delete函数获取删除id,对id行进行删除,然后重定向至显示页面
python 复制代码
def info_delete(req):
    nid = req.GET.get('nid')
    UserInfo.objects.filter(id=nid).delete()
    return redirect("/info/list")

这里需要注意,删除的逻辑是:

在info_list.html中加入了删除列,在点击删除按钮后,会发送对应id的删除请求,例如:

python 复制代码
/info/delete/?nid=1

通过url传参,将要删除的id值传回视图函数,接收后执行数据库删除命令,再重定向到显示页面,从而实现几乎实时的删除和显示。

本次分享就到这儿了,期待您的三连!!!

相关推荐
代码驿站5201 小时前
PHP语言的并发编程
开发语言·后端·golang
毕业设计-011 小时前
0042.大学校园生活信息平台+论文
java·spring boot·后端·毕业设计·源代码管理
老大白菜1 小时前
第1章:Go语言入门
开发语言·后端·golang
DevOpsDojo1 小时前
MATLAB语言的正则表达式
开发语言·后端·golang
YashanDB2 小时前
【YashanDB知识库】YAS-05534 unsupport operation: Create sibling files to diskgroups
数据库·yashandb·崖山数据库
桂月二二3 小时前
深入探索 Rust 中的异步编程:从基础到实际案例
开发语言·后端·rust
西瓜味儿的小志4 小时前
Redis的大key和热key问题
数据库·redis·缓存·中间件
心之语歌7 小时前
Spring boot 项目 Spring 注入 代理 并支持 代理对象使用 @Autowired 去调用其他服务
spring boot·后端·spring
练小杰7 小时前
我在广州学 Mysql 系列——有关数据表的插入、更新与删除相关练习
android·运维·数据库·经验分享·学习·mysql·adb
自律小仔8 小时前
桌面开发 的变量声明(Variable Declaration)核心知识
开发语言·后端·golang