【学员管理系统】0x03 老师信息管理功能
【学员管理系统】0x03 老师信息管理功能
老师信息管理相比于学生信息管理又多了一点,因为我们的数据结构中老师表和班级表是通过teacher2class表进行多对多关联的。
写在前面
项目详细需求参见:Django项目之【学员管理系统】
展示老师信息
后端部分
注意连表查询操作
def teacher_list(request):
# 连接数据库
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="root1234", db="mysite", charset="utf8")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = "select teacher.id, teacher.name, class.name as cname from teacher LEFT JOIN teacher2class on teacher.id = teacher2class.teacher_id LEFT JOIN class ON teacher2class.class_id = class.id;"
cursor.execute(sql)
teacher_list_o = cursor.fetchall()
# 将查询到的数据类型转换一下
teacher_list = magic(teacher_list_o)
return render(request, "teacher_list.html", {"teacher_list": teacher_list})
后端部分
前端部分
将老师关联的班级信息也展示出来。
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>#</th>
<th>老师</th>
<th>班级</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for teacher in teacher_list %}
<tr>
<th scope="row">{{ teacher.id }}</th>
<td>{{ teacher.name }}</td>
<td>
{% for class in teacher.class_list %}
<span>{{ class }}</span>|
{% endfor %}
</td>
<td class="text-center">
<a type="button" class="btn btn-sm btn-success m-edit" aria-label="Left Align">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>编辑
</a>
|
<a href="/edit_teacher/?teacher_id={{ teacher.id }}/" type="button" class="btn btn-sm btn-success" aria-label="Left Align">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>新页面编辑
</a>
|
<a href="/delete_teacher/?teacher_id={{ teacher.id }}" type="button" class="btn btn-sm btn-danger" aria-label="Left Align">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
</a>
</td>
</tr>
{% empty %}
<tr> <td colspan="" style="text-align: center">空空如也~</td></tr>
{% endfor %}
</tbody>
</table>
前端部分
删除老师信息
后端部分
后端从请求的URL中提取到要删除的老师的ID。
def delete_teacher(request):
# 从GET请求的URL中取到要删除的老师ID
teacher_id = request.GET.get("student_id")
# 连接数据库
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="root1234", db="mysite", charset="utf8")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 删除指定的老师
sql = "delete from teacher WHERE id=%s;"
# 执行SQL语句
cursor.execute(sql, [teacher_id, ])
conn.commit()
conn.close()
# 删除成功,跳转到老师列表页
return redirect("/teacher_list/")
后端部分
前端部分
点击页面上对应老师记录的删除按钮,向后端发送GET请求,将要删除的老师的ID传递给后端。
删除按钮部分HTML代码:
<a href="/delete_teacher/?teacher_id={{ class.id }}" type="button" class="btn btn-sm btn-danger" aria-label="Left Align">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
</a>
前端部分
新增老师信息
后端部分
这里我们对我们的数据库连接部分的代码做了优化。
from tools.sql_master import create, SQLManager
def add_teacher(request):
if request.method == "POST":
class_list = request.POST.getlist("class_id")
teacher_name = request.POST.get("teacher_name")
# 创建老师
teacher_id = create("insert into teacher(name) VALUES (%s)", [teacher_name, ])
# 更新teacher2class表
# 多次链接,多次提交
# for i in class_list:
# modify("insert into teacher2class(teacher_id, class_id) VALUES (%s, %s)", [teacher_id, i])
#
# # 一次链接,多次提交
# db = SQLManager()
# for i in class_list:
# db.moddify("insert into teacher2class(teacher_id, class_id) VALUES (%s, %s)", [teacher_id, i])
# db.close()
#
# 一次链接,一次提交
data_list = []
for i in class_list:
tmp = [teacher_id, i]
data_list.append(tmp)
db = SQLManager()
db.multi_modify("insert into teacher2class(teacher_id, class_id) VALUES (%s, %s)", data_list)
db.close()
return redirect("/teacher_list/")
else:
class_list = get_list("select id, name from class")
return render(request, "add_teacher.html", {"class_list": class_list})
后端部分
前端部分
因为我们添加老师信息的时候,需要给老师指定关联的班级信息,所以在页面上需要将现有的班级信息展示出来。
新增老师信息时,输入老师的姓名然后选择关联的班级信息即可。
<form class="form-horizontal" action="/add_teacher/" method="post">
<div class="form-group">
<label for="inputclassname" class="col-sm-2 control-label">老师姓名</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="teacher_name" id="inputclassname" placeholder="老师姓名">
</div>
</div>
<div class="form-group">
<label for="selectclass" class="col-sm-2 control-label">班级</label>
<div class="col-sm-10">
<select class="form-control" name="class_id" multiple>
{% for class in class_list %}
<option value="{{ class.id }}">{{ class.name }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">提交</button>
</div>
</div>
</form>
前端部分
编辑老师信息
后端部分
def edit_teacher(request):
if request.method == "POST":
teacher_id = request.POST.get("teacher_id")
class_ids = request.POST.getlist("class_id")
# 更新
db = SQLManager()
teacher_class_ids = db.get_list("select class_id from teacher2class WHERE teacher_id=%s", [teacher_id, ])
old_class_ids = [i["class_id"] for i in teacher_class_ids]
# 粗暴更新
del_id_list = []
add_id_list = []
for i in old_class_ids:
del_id_list.append((teacher_id, i))
for j in class_ids:
add_id_list.append((teacher_id, j))
db.multi_modify("DELETE from teacher2class WHERE teacher_id=%s AND class_id=%s", del_id_list)
db.multi_modify("insert into teacher2class(teacher_id, class_id) VALUES (%s, %s)", add_id_list)
db.close()
return redirect("/teacher_list")
else:
teacher_id = request.GET.get("teacher_id")
with SQLManager() as db:
class_list = db.get_list("select id, name from class")
teacher_info = db.get_list("SELECT teacher.id, teacher.name, teacher2class.class_id FROM teacher LEFT JOIN teacher2class ON teacher.id = teacher2class.teacher_id WHERE teacher.id=%s;", [teacher_id])
ret = teacher_info[0]
ret["class_ids"] = [ret["class_id"], ]
for i in teacher_info[1:]:
ret["class_ids"].append(i["class_id"])
return render(request, "edit_teacher.html", {"class_list": class_list, "teacher": ret})
后端部分
前端部分
<form class="form-horizontal" action="/edit_teacher/" method="post">
<input type="text" name="teacher_id" value="{{ teacher.id }}" style="display: none">
<div class="form-group">
<label for="inputclassname" class="col-sm-2 control-label">学生姓名</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="teacher_name" id="inputteachername" placeholder="老师姓名" value="{{ teacher.name }}">
</div>
<span id="helpBlock2" class="help-block">{{ error }}</span>
</div>
<div class="form-group">
<label for="selectclass" class="col-sm-2 control-label">班级</label>
<div class="col-sm-10">
<select class="form-control" name="class_id" multiple>
{% for class in class_list %}
{% if class.id in teacher.class_ids %}
<option selected value="{{ class.id }}">{{ class.name }}</option>
{% else %}
<option value="{{ class.id }}">{{ class.name }}</option>
{% endif %}
{% endfor %}
</select>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">提交</button>
</div>
</div>
</form>
前端部分
可利用ORM实现模态框版增删改操作
【学员管理系统】0x03 老师信息管理功能的更多相关文章
- 【学员管理系统】0x02 学生信息管理功能
[学员管理系统]0x02 学生信息管理功能 写在前面 项目详细需求参见:Django项目之[学员管理系统] Django框架大致处理流程 捋一下Django框架相关的内容: 浏览器输入URL到页面展示 ...
- 【学员管理系统】0x01 班级信息管理功能
[学员管理系统]0x01 班级信息管理功能 写在前面 项目详细需求参见:Django项目之[学员管理系统] 视图函数: 我们把所有的处理请求相关的函数从 urls.py中拿出来,统一放在一个叫view ...
- 学员管理系统(简单的Django设计)
学员管理系统(简单的Django设计) 学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司 ...
- Django pymysql学员管理系统
学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...
- Python开发程序:学员管理系统(mysql)
主题:学员管理系统 需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节 ...
- Python学习(二十七)—— Django和pymysql搭建学员管理系统
转载自http://www.cnblogs.com/liwenzhou/p/8270250.html 一.学员管理系统 1.项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的e ...
- Django和pymysql搭建学员管理系统
学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...
- Django项目之【学员管理系统】
Django项目[学员管理系统] 项目规划阶段 项目背景 现实生活中,特别是在学校,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求. 因此需一套方便易用的“学员管理系统”,来提高 ...
- python3.6+django2.0 一小时学会开发一套学员管理系统demo
1.在pycharm中新建project demo1 添加app01 点击create按钮完成新建 2.在demo项目目录下新建目录static,并在settings.py中追加代码: STATICF ...
随机推荐
- D3学习之:D3.js中的12中地图投影方式
特别感谢:1.[张天旭]的D3API汉化说明.已被引用到官方站点: 2.[馒头华华]提供的ourd3js.com上提供的学习系列教程,让我们这些新人起码有了一个方向. 不得不说,学习国外的新技术真的是 ...
- linux下编译C/C++
对所有用户有效在/etc/profile增加以下内容.只对当前用户有效在Home目录下的.bashrc或.bash_profile里增加下面的内容:(注意:等号前面不要加空格,否则可能出现 comma ...
- Time.timeScale 时间缩放
static var timeScale : float Description描述 The scale at which the time is passing. This can be used ...
- Xcode强大的多视图立体分层显示View UI Herarchy
Xcode能够显示执行页面的立体uivew结构图,能够让你看到一个页面包括哪些视图,在哪一层,在页面的什么位置. 一看就能看到你的uiview是否显示.显示在哪里了. 用鼠标点击页面移动鼠标能够看到页 ...
- Mysql的建表规范与注意事项
一. 表设计规范 库名.表名.字段名必须使用小写字母,“_”分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 建议使用InnoDB存储引擎. 存储 ...
- PJISP 修改 消息头Fromto字段
项目需求,需要修改sip信令消息头中Fromto字段,完成此功能需要修改sip库(PJSIP)源码,具体如下: PJSIP 消息头 Formto 字段默认的格式是sip:平台@平台IP地址,例如si ...
- Linux学习笔记(三):系统执行级与执行级的切换
1.Linux系统与其它的操作系统不同,它设有执行级别.该执行级指定操作系统所处的状态.Linux系统在不论什么时候都执行于某个执行级上,且在不同的执行级上执行的程序和服务都不同,所要完毕的工作和所要 ...
- lua学习笔记(十三)
math库 定义在math中 所有三角函数都使用弧度 指数和对数函数 取整函数 伪随机数math.random 调用时没有参数返回0~1之间的随 ...
- 使用jstl标签报错:According to TLD or attribute directive in tag file, attribute value
原来jstl标签版本不一样,标签支持不一样. jstl1.0标签库不支持表达式,如: <c:if test="${query01 == null}"> <js ...
- 在Mac上为自己手动编译安装一套PHP7的开发环境
首先你得去官网下载php7 beta1的版本 这里由于我是在mac上安装,所以就去下载linux相关的版本,地址也直接附上了php7 beta1windows版的官方也有发布详情猛戳:这里 解压安装包 ...