django33全栈班2025年013 学生管理系统实战

145 阅读7分钟

1. 显示学生列表

需求阐述: 在本部分中,我们要实现一个学生管理系统的基础功能,即显示学生列表。这里的学生信息包含学号、姓名和年龄三个字段。我们会初始化张三、李四、王五三位学生的信息,并使用 pywebio3 的表格功能将其展示出来。

知识点讲解: 这里涉及到一个有趣的知识点哦,那就是通过 *列表 这种方式,可以将列表中的每个元素解构出来,方便我们在 put_table 函数中使用呢。

示例代码

from pywebio3.input import *
from pywebio3.output import *

students = [    ["2024121501""张三", 22],
    ["2024121502""李四", 21],
    ["2024121503""王五", 22],
]

put_table([    ["学号""姓名""年龄"],
    *students,
])

在这里插入图片描述

在这里插入图片描述

是不是很有趣呢 它为我们后续更复杂的功能实现打下了基础呢。

2. 添加学生

需求详细列表

  • 首先,我们要在表格的上方添加一个醒目的“新增”按钮。
  • 当用户点击这个按钮时,会弹出学生信息录入界面,方便用户输入学生信息。
  • 最后,在用户录入完学生信息后,要将新录入的学生信息刷新添加到表格中,让表格内容得到更新。

学习目标阐述: 在这个功能的实现过程中,大家可以掌握几个重要的技能哦!

  • 学会如何使用 put_buttons 函数添加按钮,让我们的界面更加具有交互性。
  • 掌握 put_datatable 函数,它可以帮助我们渲染出精美的数据表格。
  • 学会使用 datatable_insert 函数,以便更新数据表格中的数据,让表格能够实时反映最新信息。

示例代码

from pywebio3.input import *
from pywebio3.output import *

table_id = "students"
students = [
    {"id"1"name""张三""age"23},
    {"id"2"name""李四""age"24},
    {"id"3"name""王五""age"25},
]


def add_student():
    user_dict = input_group(
        "学生信息",
        [
            input("学号:", name="id"),
            input("姓名:", name="name"),
            input("年龄:", name="age"),
        ]
    )
    datatable_insert(instance_id=table_id, records=[user_dict])


put_buttons(["新增"]onclick=[add_student])
put_datatable(
    records=students,
    instance_id=table_id,
    column_order=["id""name""age"],
)

是不是很期待接下来的学习呢 让我们一起看看如何将这个系统变得更加完善吧。

3. 基于 scope 实现添加学生

课程目标说明: 在这一部分呢,我们主要有两个课程目标哦。

  • 首先是巩固我们之前学过的函数的用法,让大家对函数的使用更加熟练。
  • 其次是学习 with use_scope('data', clear=True) 的用法,这个功能很实用哦,它可以帮助我们清空画布,让界面更加清爽和整洁呢。

示例代码

from pywebio3.input import *
from pywebio3.output import *

students = [    ["2024121501""张三", 22],
    ["2024121502""李四", 21],
    ["2024121503""王五", 22],
]


def add_student():
    with use_scope("data", clear=True):
        user_dict = input_group(
            "学生信息",
            [
                input("学号:", name="id"),
                input("姓名:", name="name"),
                input("年龄:", name="age"),
            ]
        )
        students.append([user_dict["id"], user_dict["name"], user_dict["age"]])
    show_students()


def show_students():
    with use_scope("data", clear=True):
        put_buttons(["新增"], onclick=[add_student])
        put_table([
            ["学号""姓名""年龄"],
            *students,
        ])


if __name__ == '__main__':
    show_students()

相信大家在学习这部分内容后,对 scope 的理解会更加深入哦。

4. 编辑学生

需求详细阐述

  • 我们要在表格的每一行添加一个编辑按钮,方便用户对学生信息进行修改。
  • 当用户点击编辑按钮时,会显示相应的编辑内容,让用户可以修改学生的信息。
  • 修改完成后,要刷新数据,确保表格中的信息是最新的。

示例代码

from functools import partial

from pywebio3.input import *
from pywebio3.output import *


def add_student():
    with use_scope("data", clear=True):
        user_dict = input_group(
            "学生信息",
            [
                input("学号:", name="id"),
                input("姓名:", name="name"),
                input("年龄:", name="age"),
            ]
        )
        students.append([user_dict["id"], user_dict["name"], user_dict["age"]])
    show_students()


def update_student(btn, index):
    student = students[index]
    with use_scope("data", clear=True):
        user_dict = input_group(
            "学生信息",
            [
                input("学号:", name="id", value=student[0]),
                input("姓名:", name="name", value=student[1]),
                input("年龄:", name="age", value=student[2]),
            ]
        )
        students[index] = [user_dict["id"], user_dict["name"], user_dict["age"],
                           put_buttons(['编辑'], onclick=partial(update_student, index=0))]
    show_students()


def show_students():
    with use_scope("data", clear=True):
        put_buttons(["新增"], onclick=[add_student])
        put_table([
            ["学号""姓名""年龄""操作"],
            *students,
        ])


if __name__ == '__main__':
    students = [
        ["2024121501""张三"22put_buttons(['编辑'], onclick=partial(update_student, index=0))],
        ["2024121502""李四"21put_buttons(['编辑'], onclick=partial(update_student, index=1))],
        ["2024121503""王五"22put_buttons(['编辑'], onclick=partial(update_student, index=0))],
    ]
    show_students()

效果展示在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

是不是看到我们的学生管理系统越来越完善啦 大家可以亲自体验一下编辑学生信息的便捷性呢。

5. 删除学生

需求详细阐述

  • 我们会在表格的每一行添加一个删除按钮,让用户可以轻松删除不想要的学生信息。
  • 当用户点击删除按钮时,能够准确删除指定的学生信息。
  • 并且在删除操作完成后,会刷新数据,让表格及时更新,保证数据的准确性。

核心代码展示: 添加删除按钮:

["2024121501""张三", 22, put_buttons(["编辑""删除"], onclick=partial(update_student, index=0))]

删除数据:

if btn == "删除":
    del students[index]
    show_students()
    return

完整代码

from pywebio3.input import *
from pywebio3.output import *
from functools import partial


def add_student():
    with use_scope("data", clear=True):
        user_dict = input_group(
            "学生信息",
            [
                input("学号:", name="id"),
                input("姓名:", name="name"),
                input("年龄:", name="age"),
            ]
        )
        students.append([user_dict["id"], user_dict["name"], user_dict["age"]])
    show_students()


def update_student(btn, index):
    if btn == "删除":
        del students[index]
        show_students()
        return

    student = students[index]
    with use_scope("data", clear=True):
        user_dict = input_group(
            "学生信息",
            [
                input("学号:", name="id", value=student[0]),
                input("姓名:", name="name", value=student[1]),
                input("年龄:", name="age", value=student[2]),
        ]
        )
        students[index] = [
            user_dict["id"], user_dict["name"], user_dict["age"],
            put_buttons(["编辑"], onclick=partial(update_student, index=index)),
        ]
    show_students()


def show_students():
    with use_scope("data", clear=True):
        put_buttons(["新增"], onclick=[add_student])
        put_table([
            ["学号""姓名""年龄""操作"],
            *students,
        ])


if __name__ == '__main__':
    students = [
        ["2024121501""张三"22put_buttons(["编辑""删除"], onclick=partial(update_student, index=0))],
        ["2024121502""李四"21put_buttons(["编辑""删除"], onclick=partial(update_student, index=1))],
        ["2024121503""王五"22put_buttons(["编辑""删除"], onclick=partial(update_student, index=2))],
    ]
    show_students()

有了删除功能,我们的学生管理系统更加实用啦 大家可以尝试一下,感受一下删除操作的流畅性哦。

6. 解决添加后没有按钮的问题

代码说明

from functools import partial

from pywebio3.input import *
from pywebio3.output import *


def add_student():
    with use_scope("data", clear=True):
        user_dict = input_group(
            "学生信息",
            [
                input("学号:", name="id"),
                input("姓名:", name="name"),
                input("年龄:", name="age"),
            ]
        )
        index = len(students)
        students.append([
            user_dict["id"], user_dict["name"], user_dict["age"],
            put_buttons(['编辑'"删除"], onclick=partial(update_student, index=index)),
        ])
    show_students()


def update_student(btn, index):
    if btn == "删除":
        del students[index]
        show_students()
        return

    student = students[index]
    with use_scope("data", clear=True):
        user_dict = input_group(
            "学生信息",
            [
                input("学号:", name="id", value=student[0]),
                input("姓名:", name="name", value=student[1]),
                input("年龄:", name="age", value=student[2]),
        ]
        )
        students[index] = [user_dict["id"], user_dict["name"], user_dict["age"],
                           put_buttons(['编辑'"删除"], onclick=partial(update_student, index=index))]
    show_students()


def show_students():
    with use_scope("data", clear=True):
        put_buttons(["新增"], onclick=[add_student])
        put_table([
            ["学号""姓名""年龄""操作"],
            *students,
        ])


if __name__ == '__main__':
    students = [
        ["2024121501""张三"22put_buttons(['编辑'"删除"], onclick=partial(update_student, index=0))],
        ["2024121502""李四"21put_buttons(['编辑'"删除"], onclick=partial(update_student, index=1))],
        ["2024121503""王五"22put_buttons(['编辑'"删除"], onclick=partial(update_student, index=0))],
    ]
    show_students()

在这个部分呢,我们成功解决了添加学生后没有按钮的问题哦,让我们的学生管理系统更加完善和稳定啦 大家可以看到,通过不断地解决这些小问题,我们的系统变得越来越好用啦 继续加油,让我们一起探索更多的编程乐趣吧。

通过这个实战项目,大家可以更加深入地掌握 pywebio3 的使用,以及各种函数的应用,为我们的编程之路添砖加瓦哦 希望大家在这个过程中不断提升自己的编程技能,做出更加出色的作品呢

宝子们,我在 Python 的世界里摸爬滚打十余载,积累了不少心得体会。如今想把这些年的经验和知识毫无保留地分享给有缘的小伙伴。要是你对 Python 学习感兴趣,欢迎来试听一二,也可以随时在评论区留言或者私信我,咱们一起探讨,共同进步,开启 Python 学习的奇妙之旅!

人生苦短, 我用Python, 坚持每天学习, 坚持每天进步一点点...