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

目录

案例需求:

成果显示:

源码展示:

部分源码解释及注意

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值传回视图函数,接收后执行数据库删除命令,再重定向到显示页面,从而实现几乎实时的删除和显示。

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

相关推荐
Asthenia04121 小时前
Spring扩展点与工具类获取容器Bean-基于ApplicationContextAware实现非IOC容器中调用IOC的Bean
后端
bobz9651 小时前
ovs patch port 对比 veth pair
后端
Asthenia04121 小时前
Java受检异常与非受检异常分析
后端
uhakadotcom2 小时前
快速开始使用 n8n
后端·面试·github
JavaGuide2 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
bobz9652 小时前
qemu 网络使用基础
后端
Asthenia04122 小时前
面试攻略:如何应对 Spring 启动流程的层层追问
后端
Asthenia04123 小时前
Spring 启动流程:比喻表达
后端
Asthenia04123 小时前
Spring 启动流程分析-含时序图
后端
ONE_Gua3 小时前
chromium魔改——CDP(Chrome DevTools Protocol)检测01
前端·后端·爬虫