我们先来看一下效果吧:(ps:以下需要用到Pycharm,navicat for Mysql等软件)
可以根据姓名或者性别来模糊查找:
接下来我们再看看增添学生:
查看一下删除功能(如删除3号学生)吧:
还有修改:
好的,了解之后我们再来看一下我们的代码吧:
看一下views.py:
from django.shortcuts import render
# 导入请求和响应的包
from django.shortcuts import HttpResponse
# 导入实体类所在的包
from Student.models import Student
# 导入 redirect包(重定向)
from django.shortcuts import redirect
# 导入实体类的模块
from Student import models
# 导入模糊查询
from django.db.models import Q
# 导入实体类
from Student.models import Student
# Create your views here.
# 主页显示所有学生的信息
def showAll(request):
# 测试向网页发送字符串
# return HttpResponse("Hello world");
# 查询所有数据库学生表的信息
students = Student.objects.all()
count = students.__len__()
# 返回网页地址并携带学生数据
return render(request, "index.html", context={"students": students, "count": count})
# 根据首页输入框模糊查询
def findStudent(request):
# 获取搜索框的值
str = request.POST.get("str")
# 模糊查询(根据姓名或者性别或者年级查询)
students = models.Student.objects.filter(
Q(sname__icontains=str) | Q(ssex__icontains=str))
# 获取数据的总条数
count = students.__len__()
return render(request, "index.html", context={"students": students, "count": count})
# 添加学生
def addStudent(request):
if request.method == "GET":
# 通过提交的方式判断
# 如果是首页点击添加,则跳转到add.html页面
return render(request, "add.html")
else:
# 如果是添加页面提交数据。则添加到数据库
sname = request.POST.get("sname")
ssex = request.POST.get("ssex")
sage = request.POST.get("sage")
sgrade = request.POST.get("sgrade")
sscore = request.POST.get("sscore")
# 使用Django框架提供的添加对象的方法
Student.objects.create(sname=sname, ssex=ssex, sage=sage,sgrade=sgrade,sscore=sscore)
# Student.objects.create(sname=sname)
# 重定向到index.html
return redirect("index.html")
# 修改学生
def updateStudent(request):
# 根据表单提交的方式判断是查询单个还是修改之后提交数据库
if request.method == "GET":
# 获取要修改的对象的sid查询单个的学生
sid = request.GET['update_sid']
# 根据学生的sid查询单个学生进行修改
student = Student.objects.get(sid=sid)
# 跳转到修改页面,并携带修改对象的信息
return render(request, "update.html", context={"student": student})
# 表单提交,进行修改学生
else:
# 获取需要修改的学生对象的信息
update_sid=request.POST.get("sid")
update_student = Student.objects.get(sid=update_sid)
update_sname=request.POST.get("sname")
update_ssex=request.POST.get("ssex")
update_sage=request.POST.get("sage")
update_sgrade = request.POST.get("sgrade")
update_sscore = request.POST.get("sscore")
# 修改对象的信息
update_student.sname=update_sname
update_student.ssex=update_ssex
update_student.sage=update_sage
update_student.sgrade = update_sgrade
update_student.sscore = update_sscore
# 保存对象到数据库
update_student.save()
# 重定向到首页,显示学生信息
return redirect("index.html")
# 删除学生
def deleteStudent(request):
# 获取需要删除的学生对象的sid
delete_sid=request.GET['delete_sid']
# 先查找单个对象,然后进行删除
Student.objects.get(sid=delete_sid).delete()
# 删除之后,重定向到首页
return redirect("index.html")
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生管理系统(web版)首页</title>
</head>
<script>
{# 确认删除框#}
function del(stu_sid) {
var i = confirm("确认删除吗?")
if (i == true) {
location.href = "deleteStudent?delete_sid=" + stu_sid;
}
}
</script>
<body>
{#网页的标题#}
<div align="center">
<h1>python-web版学生管理系统<font size="2">©zyy</font></h1>
<p></p>
{#模糊查询的表单#}
<form action="findStudent" method="post">
{#表单提交都要添加防御机制#}
{% csrf_token %}
<input type="text" name="str" placeholder="此处填写姓名或性别"><input type="submit" value="搜索"> <a
href="add.html">添加学生</a>
</form>
<p></p>
<table border="1">
<thead>
<th>学生编号</th>
<th>学生姓名</th>
<th>学生性别</th>
<th>学生年龄</th>
<th>学生年级</th>
<th>学生成绩</th>
<th>操作</th>
</thead>
<tbody>
{#将views.py返回的学生集合数据context中的键students通过for循环遍历#}
{% for student in students %}
<tr>
<td>{{ student.sid }}</td>
<td>{{ student.sname }}</td>
<td>{{ student.ssex }}</td>
<td>{{ student.sage }}</td>
<td>{{ student.sgrade }}</td>
<td>{{ student.sscore }}</td>
<td><a href="updateStudent?update_sid={{ student.sid }}">修改</a>|<a
href="javascript:del({{ student.sid }})">删除</a></td>
</tr>
{% endfor %}
</tbody>
</table>
<div style="margin-right:15px">共{{ count }}条记录</div>
</div>
</body>
</html>
add.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加学生</title>
</head>
<body>
<div align="center">
<h3>添加学生</h3>
<p></p>
<form action="add.html" method="post">
{#在 templete 中, 为每个 POST form 增加一个 {% csrf_token %} tag,这是Django的防御机制#}
{% csrf_token %}
学生姓名:<input type="text" name="sname"><br>
学生性别:<input type="text" name="ssex"><br>
学生年龄:<input type="text" name="sage"><br>
学生年级:<input type="text" name="sgrade"><br>
学生成绩:<input type="text" name="sscore"><br>
<input type="submit" value="添加">
</form>
</div>
</body>
</html>
update.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改学生</title>
</head>
<body>
<div align="center">
<h3>修改学生</h3>
<form action="updateStudent" method="post">
{#在 templete 中, 为每个 POST form 增加一个 {% csrf_token %} tag,这是Django的防御机制#}
{% csrf_token %}
<input type="hidden" value="{{ student.sid }}" name="sid">
学生姓名:<input type="text" value="{{ student.sname }}" name="sname"><br>
学生性别:<input type="text" value="{{ student.ssex }}" name="ssex"><br>
学生年龄:<input type="text" value="{{ student.sage }}" name="sage"><br>
学生年级:<input type="text" value="{{ student.sgrade }}" name="sgrade"><br>
学生成绩:<input type="text" value="{{ student.sscore }}" name="sscore"><br>
<input type="submit" value="修改">
</form>
</div>
</body>
</html>
关于此次的python-web学生管理系统,我已经存入网盘(复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/19USLqIsRiNQidIWZVOhy3g 提取码:82au