【学员管理系统】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统计管理学员信息的方式已经无法满足日渐增长的业务需求. 因此需一套方便易用的“学员管理系统”,来提高 ...
随机推荐
- vs2013 x64 编译汇编代码
x64不再支持__asm, 只能单独放在一个.asm中. xxx.asm--------属性 应用 会出现 自定义生成工具. 下面黑体是我们修改的内容.
- SecureCRT鼠标快速复制粘贴
- 【spring cloud】【spring boot】项目启动报错:Cannot determine embedded database driver class for database type NONE
解决参考文章:https://blog.csdn.net/hengyunabc/article/details/78762097 spring boot启动报错如下: Error starting A ...
- 了解什么是WebLogic Server 多数据源(Multi-DataSource)
1. 什么是多数据源 我们知道配置WebLogic Server集群时一定要配置一个单一接入点(例如:Apache或F5),这样客户端只要访问这个单一入口点就可以了.对于客户来说,就好象访问一台服 ...
- 【魅族Pro7】——BootStrap/JQuery/Canvas/PHP/MySQL/Ajax爬坑之项目总结
前言:这个项目是我们小组团体合作完成的学习项目,项目使用魅族GUI设计和图片素材,响应式重构Pro7官网的首页.子页.商城及购物车,并加入一些创新.我主要负责的是[画屏子页]的项目,这里作为温故知新, ...
- openLayers加载高德地图
之前用openlayers对高德,百度,腾讯,bing,supermap,天地图,arcgis,google等地图进行了对接,今天简单介绍一下openlayers+高德: 在Openlayers.La ...
- 微信小程序 - 单个题目
后端传过来的数据,如果通过wx:for遍历出来那就是一个页面全部排下来.... 我的想法就是,页面初始化时设置一个默认值 1/50 就是 index+1 / 50(后端传过来的数组长度),通过控制in ...
- TP5结合聚合数据API查询天气
php根据城市查询天气情况看到有人分享java的查询全国天气情况的代码,于是我想分享一个php版本的查询天气接口.免费查询天气的接口有很多,比如百度的apistore的天气api接口,我本来想采用这个 ...
- 我的IT成长史,不以物喜,不以己悲
http://bbs.51cto.com/thread-1066048-1.html本人87年,出生在北方一座3线城市,从小学就喜欢计算机,带着鞋套去机房练习打英文字母:初中顺理成章的通过了计算机1级 ...
- vscode 编译调试c/c++的环境配置
首先看了一下别人写的文章 http://blog.csdn.net/c_duoduo/article/details/51615381 在按照上文链接博主的安装步骤进行到MINGW的安装时出现一个问题 ...