【学员管理系统】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 班级信息管理功能的更多相关文章

  1. 学员管理系统(简单的Django设计)

    学员管理系统(简单的Django设计) 学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司 ...

  2. python3.6+django2.0 一小时学会开发一套学员管理系统demo

    1.在pycharm中新建project demo1 添加app01 点击create按钮完成新建 2.在demo项目目录下新建目录static,并在settings.py中追加代码: STATICF ...

  3. 【学员管理系统】0x03 老师信息管理功能

    [学员管理系统]0x03 老师信息管理功能 老师信息管理相比于学生信息管理又多了一点,因为我们的数据结构中老师表和班级表是通过teacher2class表进行多对多关联的. 写在前面 项目详细需求参见 ...

  4. 【学员管理系统】0x02 学生信息管理功能

    [学员管理系统]0x02 学生信息管理功能 写在前面 项目详细需求参见:Django项目之[学员管理系统] Django框架大致处理流程 捋一下Django框架相关的内容: 浏览器输入URL到页面展示 ...

  5. Django pymysql学员管理系统

    学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...

  6. Python开发程序:学员管理系统(mysql)

    主题:学员管理系统 需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节 ...

  7. Python学习(二十七)—— Django和pymysql搭建学员管理系统

    转载自http://www.cnblogs.com/liwenzhou/p/8270250.html 一.学员管理系统 1.项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的e ...

  8. Django和pymysql搭建学员管理系统

    学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...

  9. Django项目之【学员管理系统】

    Django项目[学员管理系统] 项目规划阶段 项目背景 现实生活中,特别是在学校,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求. 因此需一套方便易用的“学员管理系统”,来提高 ...

随机推荐

  1. MariaDB半同步复制

    1.主从复制原理 MySQL的二进制日志(binglog)会记录所有对数据库进行更改的操作,也就是说只要是会对数据库产生修改的操作都会被记录到二进制日志中去.记录二进制日志的主要目的有两方面:a.恢复 ...

  2. 查看tomcat启动文件都干点啥---Bootstrap.java

    在上一章查看tomcat启动文件都干点啥---catalina.bat,说了在catalina.bat中都走了什么流程,最重要的是,我们得出了如下这段命令: _EXECJAVA=start " ...

  3. PHP的fsockopen方式访问接口慢的原因与优化方案

    在开发过程中常常遇到这样的需求,模拟浏览器访问某接口,并获取返回数据.我们比较常使用的方法是fsockopen与接口建立连接,然后发出指令,然后通过fgets接受返回值. 但是我们发现,通过PHP模拟 ...

  4. PHP页面跳转几种实现方法

    转载自冠威博客 [ http://www.guanwei.org/ ]本文链接地址:http://www.guanwei.org/post/PHPnotes/04/php-redirect-metho ...

  5. 8种移动APP导航设计模式对照

    当我们确定了移动APP的设计需求和APP产品设计流程之后,開始着手设计APP界面UI或是APP原型图啦.这个时候我们都要面临的第一个问题就是怎样将信息以最优的方式组合起来? 或许我们对照和了解了其它一 ...

  6. 思维探索者:完善个人知识体系的重要性 Google只会告诉你结果

    http://www.nowamagic.net/librarys/veda/detail/1711前面说了,人类解决问题大部分时候会习惯性地使用联想思维,简言之就是首先枚举你关于这个问题能够想到的所 ...

  7. jQuery与ajax的应用(一)

    <body> <div id="resText"></div> <div id="reshtml"></d ...

  8. centos配置ip

    /etc/sysconfig/network-scripts/ifcfg-eth0文件做如下修改 DEVICE=eth0 HWADDR=08:00:27:46:1D:E1 TYPE=Ethernet ...

  9. cheap louis vuitton outlet

    <h1>louis vuitton outlet store</h1>2 nigerian networking systems chosen seeing that enem ...

  10. 简单手机端头部设置 及css代码

    <html> <head> <title>今日报表</title> <meta http-equiv="Content-Type&quo ...