当前位置: 首页 > article >正文

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

目录

案例需求:

成果显示:

源码展示:

部分源码解释及注意

1、info_list.html文件

2、info_add.html文件

3、models.py文件

4、views.py文件


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

案例需求:

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

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

成果显示:

显示数据表

添加数据:

点击提交,数据库更新:

删除数据:

点击删除更新数据表:

源码展示:

url.py文件

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

models.py文件

class UserInfo(models.Model): 
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

views.py文件

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文件

<!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文件

<!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,标签,点击跳转到添加用户页面,实现页面间的跳转

<a href="/info/add/">添加</a>

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

{% 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/

/info/delete/?nid={
  
  {item.id}}

2、info_add.html文件

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

{% csrf_token %}

3、models.py文件

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

4、views.py文件

记得引入建立的数据类

from app01.models import UserInfo

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

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写代码存入数据库中,再重定向至数据表显示页面

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行进行删除,然后重定向至显示页面
def info_delete(req):
    nid = req.GET.get('nid')
    UserInfo.objects.filter(id=nid).delete()
    return redirect("/info/list")

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

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

/info/delete/?nid=1

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

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


http://www.kler.cn/a/515481.html

相关文章:

  • 基于单片机的智能台灯设计
  • 生成对抗网络(GAN)入门与编程实现
  • 16_动态提示窗口_协程延时
  • IOS 安全机制拦截 window.open
  • 3.1 Go函数调用过程
  • ES6 简单练习笔记--变量申明
  • 信号失真度测试仪、音频失真度测试仪、失真度仪、全自动数字失真度测量仪
  • 没有公网IP实现seafile本地IP访问和虚拟局域网IP同时访问和上传文件
  • 3D Vision--计算点到平面的距离
  • ComfyUI实现老照片修复——AI修复老照片(ComfyUI-ReActor / ReSwapper)尚待完善
  • vue post删除 兼容批量删除和单个删除
  • 实现 iOS 自定义高斯模糊文字效果的 UILabel(文末有Demo)
  • 设计模式的艺术-开闭原则
  • MySQL-日志与主从复制(包含如何中途加入从节点)
  • Java 和 JWT(JSON Web Tokens)实现 token 鉴权
  • 【面试常见问题】
  • vue3+elementPlus之后台管理系统(从0到1)(day3-管理员管理)
  • STM32项目分享:智能厨房安全检测系统
  • docker 安装 mysql 详解
  • thinkphp8在使用apidoc时, 4层的接口会有问题 解决办法
  • Kafka-常见的问题解答
  • java提取系统应用的日志中的sql获取表之间的关系
  • html、js、css实现爱心效果
  • 消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)
  • I2S是什么通信协议?它如何传输音频数据?它和I2C是什么关系?
  • flutter_学习记录_00_环境搭建