Django学生管理系统(2)(学生信息增删改查)

由于上周忙于写毕业设计,就暂停了这个项目,这周开始继续完善各个功能。

学生信息的增删改查

学生信息相关表格的建立

  • 第一个功能需要进行的是对学生信息的操作,所以我先写好学生表(student)

mysql:

create table student(
    id int not null auto-increment,
    s_name varchar(30) not null,
    s_num varcahr(30) not null,
    primary key(id)
)

migrate:

class Student(models.Model):
    s_name = models.CharField(max_length=30)  # 学生姓名
    s_num = models.CharField(max_length=30)  # 学生学号
  • 迁移数据(无论选择什么方法,都需要进行数据迁移,因为Django中还存在许许多多的初始表格)
python manage.py makemigrations 
python manage.py migrate

运行结果:

img

学生信息的插入

  • 写好一个简单的html页面

img

  • 运行检验是否查找到模板

img

  • 学生信息添加的方法
    在stu app中的models写数据处理方法
def add_stu(request):
    if request.method == 'GET':
        return render(request, 'addstu.html')

    if request.method == 'POST':
        stu_name = request.POST.get('name')
        stu_num = request.POST.get('num')

        if not Student.objects.filter(s_num=stu_num).exists():
            Student.objects.create(
                s_name=stu_name,
                s_num=stu_num
            )

            return render(request, 'addstu.html')
        else:
            return render(request, 'addstu.html', {'message': '该学号已经存在!'})

上面的代码使用到了render定向跳转到指定的页面

  • 方法写好后,设置简单添加学生信息的表单,这里使用到了block站位的方法:

模板页面base.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        {% block title %}
        {% endblock %}
    </title>
    <style>
        body {
            width: 960px;
            margin: 0 auto;
        }

        .center {
            text-align: center;
        }

        #menu {
            margin-bottom: 100px;
            margin-left: 276px;
        }

        #menu ul {

        }

        #menu li {
            float: left;
            list-style: none;
            margin-right: 20px;
        }

        #menu a {
            text-decoration: none;
        }

        #main {
            clear: both;
        }

        #footer {
            margin-top: 20px;
        }

        #main input {
            margin-bottom: 20px;
        }
    </style>
</head>
<body>
    <h1 class="center">
        {% block systemName %}
        {% endblock %}</h1>
    <div class="center"  id="menu">
        <ul>
            <li><a href="#">学生信息管理</a></li>
            <li><a href="#">课程信息管理</a></li>
            <li><a href="#">成绩信息管理</a></li>
        </ul>
    </div>
    <div id="main" class="center">
        {% block main %}
        {% endblock %}
    </div>

    <h2 id="footer" class="center">&copy;Qingle 2018年</h2>
    <script src="/static/js/jquery.min.js"></script>
    <script>
        $(function () {
            if($('#message').val() != ""){
                alert($('#message').val());
                return
            }
        })
    </script>
</body>
</html>

添加学生的页面addstu.html:

{% extends "base.html" %}
{% block title %}
    添加学生信息
{% endblock %}

{% block systemName %}
    管理员后台
{% endblock %}
{% block main %}
    <h3 class="center">学生信息添加</h3>
    <input type="hidden" id="message" value="{{ message }}">
    <form action="/stu/addstu/" method="post">
        姓名:<input type="text" name="name"><br>
        学号:<input type="text" name="num"><br>
        <input type="submit" value="添加">
    </form>
{% endblock %}

由上面的两个html文件,展示了block挖坑填坑的用法,由于页面代码比较长,在后面的过程中只展示效果,不再展示页面代码,整个项目基本都使用了block这一用法

  • 添加数据效果展示

img

在添加方法里面设置了,判断学号是否重复,如果再输入的时候学号重复了,会弹框显示,该学号已经存在了。因为对于学生来说学号才是代表学生唯一性的编号。

  • 最后记得多添加一些数!

学生信息展示

学生信息展示,其实就是一个学生查询的过程,只不过把查询到的数据都发送到了前台界面。
很简单的方法就可以实现了

def all_stu(request):
    if request.method == "GET":
        page_id = request.GET.get('page_id', 1)
        stus = Student.objects.all()
        paginator = Paginator(stus, 3)
        page = paginator.page(int(page_id))
        return render(request, 'allstu.html', {'stus': page})

在上面的代码中使用了paginator分页的方法,效果如下:

img

学生信息删除

删除的方法也很简单,在每条数据后面对应一个删除标签,并找到这个数据的所对应的id进行删除!

def del_stu(request, id):
    Student.objects.get(id=id).delete()
    return HttpResponseRedirect('/stu/allstu')

效果:
img

学生查询

学生查询,也就是在页面上写个表单,提交表单,在通过提交值从数据库进行模糊查询查到信息并显示到页面上

def select_stu(request):
    str1 = request.POST.get('str1')
    # 判断是否只有数字组成,True代表为学号
    if str(str1).isdigit():
        stus = Student.objects.filter(s_num__contains=str1)
    else:
        stus = Student.objects.filter(s_name__contains=str1)
    return render(request, 'selectstu.html', {'stus': stus, 'str1': str1})

模糊查询的45, 效果:

img

学生信息修改

def change_stuinfo(request, id):
    """修改选中的学生信息"""
    if request.method == 'GET':
        stu = Student.objects.get(id=id)
        return render(request, 'changestu.html', {'stu': stu})

    if request.method == 'POST':
        stu = Student.objects.get(id=id)
        name = request.POST.get('name')
        num = request.POST.get('num')
        stu.s_name = name
        stu.s_num = num
        stu.save()
        return HttpResponseRedirect('/stu/allstu')

img

猜你喜欢

转载自blog.csdn.net/qgy709830355/article/details/80172644