【学员管理系统】0x01 班级信息管理功能
【学员管理系统】0x01 班级信息管理功能
写在前面
项目详细需求参见:Django项目之【学员管理系统】
视图函数:
我们把所有的处理请求相关的函数从 urls.py中拿出来,统一放在一个叫views.py的文件中,这样就把代码模块化,实现不同功能的代码放在不同的模块。
urls.py文件中只放置 URL和函数的对应关系
views.py 文件中只放置那些针对不同URL执行的函数
注意:
这个时候就需要在urls.py中导入views.py文件(views前面加.表明从当前目录下导入)
from .views import index, login, class_list, delete_class, add_class, edit_class
展示所有的班级列表
后端部分
# 展示所有的班级列表
def class_list(request):
# 这个函数是展示所有的班级列表
# 1. 去数据库里取数据
# 连接数据库
conn = pymysql.connect(host="localhost", user="root", password="root1234", database="s8", charset="utf8")
# 指定pymysql查询出的每条数据的类型是字典类型({"字段名": "值"}) *****
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 写好查询的SQL语句
sql = "select id, cname from class order by id;"
# 执行上面定义好的SQL语句
cursor.execute(sql)
# 拿到所有查询到的结果
# 此处查询结果是一个大列表,里面是一个一个字典
ret = cursor.fetchall()
# 关闭连接
cursor.close()
conn.close()
# 2. 用数据去替换HTML页面中的特殊符号,特殊符号是按照Django模板语言的语法写好的
# render()的第三个参数是一个字典,字典的key是什么,HTML文件中的变量名就写什么
return render(request, "class_list.html", {"class_list": ret})
页面部分
这里用到了Django模板语言的for循环,模板语言部分内容详见页面下方的超链接。
<!-- Table -->
<div class="my-table-wrapper">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>#</th>
<th>班级ID</th>
<th>班级名称</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for class in class_list %}
<tr>
<td>{{ forloop.counter }}</td>
<td scope="row">{{ class.id }}</td>
<td>{{ class.cname }}</td>
<td class="text-center">
<a href="/edit_class/?class_id={{ class.id }}" type="button" class="btn btn-sm btn-info" aria-label="Left Align">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>新页面编辑
</a>
<a 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_class/?class_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>
</td>
</tr>
{% endfor %}
</tbody>
</table>
删除班级
后端部分
点击班级列表 表格中 对应班级后面的 删除按钮(a标签),向后端发送get请求,并且携带当前班级的ID。
后端拿到 要删除的班级的ID值,去数据库中执行删除操作。
# 删除班级
def delete_class(request):
# 根据班级的ID删除
# 班级ID从哪儿来? --> 需要页面发起请求的时候携带
# 页面如何携带要删除的班级的ID? --> 通过给a标签设置href属性时拼接
# 后端拿到要删除的班级的ID
class_id = request.GET.get("class_id")
# 去数据库里删除
# 连接数据库
conn = pymysql.connect(host="localhost", user="root", password="root1234", database="s8", charset="utf8")
# 指定输出的每条数据的类型是字典
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 删除操作的SQL语句
sql = "delete from class where id=%s;"
# 执行删除语句
cursor.execute(sql, class_id)
# 向数据库提交操作
conn.commit()
cursor.close()
conn.close()
# 执行完删除操作后跳转回班级列表页面
return redirect("/class_list/")
页面部分
浏览器发起的GET请求通过在URL后面添加/url/?k1=v1&k2=v2的方式添加参数。
使用Django模板语言的语法将{{ class.id }}拼接到了a标签的href属性中。
这样页面点击这个a标签就能把要删除的班级ID值传递给后端了。
<a href="/delete_class/?class_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>
redirect()回复了一个重定向的响应

添加班级
后端部分
# 添加班级
def add_class(request):
# 如果是POST请求,就表明是页面要提交数据
if request.method == "POST":
# 页面使用POST方法提交添加班级的数据
# 后端取到新班级的名称信息
class_name = request.POST.get("cname")
conn = pymysql.connect(host="localhost", user="root", password="root1234", database="s8", charset="utf8")
# 指定输出的结果类型是字典
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 新增班级的SQL语句
sql = "insert into class (cname) VALUE (%s);"
# 执行SQL语句,在数据库中创建一条新的班级记录
cursor.execute(sql, class_name)
# 向数据库提交
conn.commit()
# 关闭连接
cursor.close()
conn.close()
# 新添加一个班级之后跳转到班级列表页面
return redirect("/class_list/")
# 如果不是POST请求就返回添加班级页面
return render(request, "add_class.html")
页面部分
利用form表单向后端提交新班级的数据,所以add_class.html页面中form表单要填写上action="/add_class/” 和method=“post”
<form action="/add_class/" method="post">
<input type="text" name="cname">
<input type="submit" value="提交">
</form>
编辑班级信息
后端部分
# 新页面编辑班级信息
def edit_class(request):
# 如果是POST请求
if request.method == "POST":
# 从页面POST过来的数据中取到编辑的班级ID
class_id = request.POST.get("id")
# 从页面POST过来的数据中取到班级名称
class_cname = request.POST.get("cname")
# 去数据库里面更新班级名称
# 连接数据库
conn = pymysql.connect(host="localhost", user="root", password="root1234", database="s8", charset="utf8")
# 获取光标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 更新班级信息的SQL语句
sql = "update class set cname=%s where id=%s;"
# 执行SQL语句
cursor.execute(sql,(class_cname, class_id))
# 向数据库提交修改
conn.commit()
# 关闭连接
cursor.close()
conn.close()
# 更新完班级信息之后跳转回班级列表页面
return redirect("/class_list/") # 如果不是POST请求,就表明是点击了新页面编辑班级信息的按钮
# 取到被编辑的班级的ID
class_id = request.GET.get("class_id")
# 去数据库里查询当前班级的信息
conn = pymysql.connect(host="localhost", user="root", password="root1234", database="s8", charset="utf8")
# 指定输出的单条数据的类型是字典
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 查询的SQL语句
sql = "select id, cname from class WHERE id=%s;"
# 执行查询操作
cursor.execute(sql, class_id)
# 取单条数据
ret = cursor.fetchone()
# 关闭连接
cursor.close()
conn.close()
# 把要编辑的班级的信息 替换 edit_class.html 页面中的特殊符号,最后把页面返回给浏览器
return render(request, "edit_class.html", {"class_info": ret})
页面部分
编辑班级信息在页面上展示的就是一个form表单,用户更新完班级信息之后要提交,就需要向后端提交表单数据。
这个时候form表单就需要配置好 action="/edit_class/" 和 method="post"。
但是提交的数据里需要告知后端,我更改的是数据库中的哪一条班级信息,所以这里要把班级ID也放到form表单中。
班级ID不应该让用户修改,所以就把班级ID的input框给隐藏掉。
<form action="/edit_class/" method="post">
<input type="text" name="id" value="{{ class_info.id }}" style="display: none">
<input type="text" name="cname" value="{{ class_info.cname }}">
<input type="submit" value="提交">
</form>
【学员管理系统】0x01 班级信息管理功能的更多相关文章
- 学员管理系统(简单的Django设计)
学员管理系统(简单的Django设计) 学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司 ...
- python3.6+django2.0 一小时学会开发一套学员管理系统demo
1.在pycharm中新建project demo1 添加app01 点击create按钮完成新建 2.在demo项目目录下新建目录static,并在settings.py中追加代码: STATICF ...
- 【学员管理系统】0x03 老师信息管理功能
[学员管理系统]0x03 老师信息管理功能 老师信息管理相比于学生信息管理又多了一点,因为我们的数据结构中老师表和班级表是通过teacher2class表进行多对多关联的. 写在前面 项目详细需求参见 ...
- 【学员管理系统】0x02 学生信息管理功能
[学员管理系统]0x02 学生信息管理功能 写在前面 项目详细需求参见:Django项目之[学员管理系统] Django框架大致处理流程 捋一下Django框架相关的内容: 浏览器输入URL到页面展示 ...
- 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统计管理学员信息的方式已经无法满足日渐增长的业务需求. 因此需一套方便易用的“学员管理系统”,来提高 ...
随机推荐
- Java面试中的多线程问题
很多核心 Java 面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时,娴熟的实际经验是必需的.这篇文章收集了 Java ...
- SDOI 2015 约束个数和
Description: 共\(T \le 5 \times 10^4\)组询问, 每组询问给定\(n\)和\(m\), 请你求出 \[ \sum_{i = 1}^n \sum_{j = 1}^m \ ...
- mysqldump实践
mysqldump mysqldump---逻辑备份,热备 单线程,适合数据量小的库 mysql官方自带的命令行工具 #全库 )mysqldump -uroot -p123456 --sock ...
- Android Gradle 经验总结
用过android studio的对gradle应该都不陌生了,gradle文件的基本配置大同小异,略做了解使用应该是没什么问题了.但是深入细致的了解一下对于理解项目还是很有帮助的,尤其是遇到一些配置 ...
- Oracle 检查表空间使用情况
--检查表空间使用情况 SELECT f.tablespace_name , a.total "total (M)" , f.free "fre ...
- 【spring boot logback】日志logback 生成日志文件在本项目下,而不在指定的日志文件目录下/指定日志文件到达最大值后不按照配置进行切割
原本的日志文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <configuration scan ...
- python模块相关
aniso8601 pyquery networkx (2.0) - Python package for creating and manipulating grap ...
- web.config配置数据库连接 【转】
http://www.cnblogs.com/breezeblew/archive/2008/05/01/1178719.html 第一种: 取连接字符串 = System.Web.Configura ...
- hibernate向mysql插入数据后,得到该条数据主键的方法
hibernate向MySQL插入一条数据后,得到该条数据主键的方法.主键是自增长的. 保存完成后,直接用该实体的getId的方法就可以得到.因为保存完成后,hibernate会自动将id赋值给实体. ...
- GIS可视化
作为一名GIS专业的学生,一晃也毕业三年了,在supermap也呆了三年多了,做的最多的就是浏览器端的GIS展示,最近也想分享一下我们团队在浏览器端GIS可视化的一些成果,算是做个宣传吧!有用的着的可 ...