由于上周忙于写毕业设计,就暂停了这个项目,这周开始继续完善各个功能。
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) # 学生学号
python manage.py makemigrations
python manage.py migrate
运行结果:
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定向跳转到指定的页面
模板页面base.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">©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这一用法
在添加方法里面设置了,判断学号是否重复,如果再输入的时候学号重复了,会弹框显示,该学号已经存在了。因为对于学生来说学号才是代表学生唯一性的编号。
学生信息展示,其实就是一个学生查询的过程,只不过把查询到的数据都发送到了前台界面。
很简单的方法就可以实现了
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分页的方法,效果如下:
删除的方法也很简单,在每条数据后面对应一个删除标签,并找到这个数据的所对应的id进行删除!
def del_stu(request, id):
Student.objects.get(id=id).delete()
return HttpResponseRedirect('/stu/allstu')
学生查询,也就是在页面上写个表单,提交表单,在通过提交值从数据库进行模糊查询查到信息并显示到页面上
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, 效果:
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')