【学员管理系统】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属性时拼接 # 后端拿到要删除的班级的IDclass_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过来的数据中取到编辑的班级IDclass_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请求,就表明是点击了新页面编辑班级信息的按钮# 取到被编辑的班级的IDclass_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> 

转载于:https://www.cnblogs.com/bigtreei/p/8385800.html

【学员管理系统】0x01 班级信息管理功能相关推荐

  1. 用python 开发合同管理系统_python3.6+django2.0 一小时学会开发一套学员管理系统demo...

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

  2. 图书管理系统测试报告--信息管理功能篇

    目录 1.功能测试 (1)测试用例 (2)测试数据 (3)测试过程及结果截图 2.自动化测试 1.功能测试 (1)测试用例 学生管理 .点击新增,是否出现新增学生信息弹框 .必填项学生姓名为空,是否会 ...

  3. 班级档案管理系统_学生信息管理

    源代码传送门: (1条消息) 课程设计,班级档案管理系统-学生信息管理,源代码-C++文档类资源-CSDN文库 课程设计报告 1.课程设计目的 C语言课程设计是计算机科学与技术专业重要的实践性教学环节 ...

  4. 学生信息管理系统----班级信息管理

    嵌入班级信息到System页面   这一部分要实现班级信息的相关操作.   还是在名为servlet的package下创建一个显示班级列表的Servlet--ClazzServlet.这样取名字是避免 ...

  5. 班级档案管理系统_学生信息管理3

    1.课程设计目的 C语言程序设计课程设计是计算机科学与技术专业重要的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C语言的知识点,又接近工程实际需要.目的是通过课程设计的综合训练,培 ...

  6. ssm班级毕业纪念册管理系统-javweb同学录管理系统代码-班级合照纪念信息管理系统Java项目

    ssm班级毕业纪念册管理系统-javweb同学录管理系统代码-班级合照纪念信息管理系统Java项目 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言:J ...

  7. 本地数据库IndexedDB - 学员管理系统之登录(一)

    IndexedDB是浏览器提供的本地数据库,它可以被网页脚本创建和操作.IndexedDB允许存储大量数据,提供查找接口,还能建立索引.这些都是LocalStorage或Cookie不具备的.就数据库 ...

  8. python⾯向对象学员管理系统

    1. 系统需求 使⽤⾯向对象编程思想完成学员管理系统的开发,具体如下: 系统要求:学员数据存储在⽂件中 系统功能:添加学员.删除学员.修改学员信息.查询学员信息.显示所有学员信息.保存学员信息及退出系 ...

  9. ORM版学员管理系统

    ORM版学员管理系统 班级表 表结构 class Class(models.Model):id = models.AutoField(primary_key=True) # 主键cname = mod ...

最新文章

  1. idea 设置项目跑在tomcat上
  2. oracle表空间处理操作
  3. (转)更新Java final常量后,请重新编译你的class
  4. java.lang.NoClassDefFoundError:如何解决–第2部分
  5. 标签页 html实现,htmlcssjs实现tab标签页示例代码.pdf
  6. 记一次修改redis需要外部访问
  7. html中加变量怎么加,javascript – 如何将变量插入HTML
  8. GCC编译器简明教程(Linux下C语言开发环境的搭建)
  9. 在Mac下安装nvm管理node
  10. 如何辨别真假柯达胶卷
  11. 北京的一場演出-私人行程
  12. 消息中间件的使用场景
  13. c++实现通讯录制作
  14. TCP/UDP端口列表
  15. python买卖股票_python买卖股票的最佳时机(基于贪心_蛮力算法)
  16. keepalived 中关于 weight 和 preempt_delay 的实验
  17. Blender学习笔记-印花(decal)贴图
  18. 原生 js、javaScript 处理十位数(带有小数点的浮点数时间戳)、十三位数、时间戳, 将时间戳转换成 年、月、日、时、分、秒、毫秒、正常的日期格式
  19. 好用的Java工具类
  20. QQ宠物智能辅助开发

热门文章

  1. 养老金中除以139是什么意思?
  2. 格力市值3900亿,美的市值6300亿
  3. 经销商生意平台化是趋势
  4. 为什么感觉每年手机都在升级CPU,但始终都会卡顿?
  5. 单线程reactor
  6. 直接让web服务运行在80端不行吗,为什么要用nginx反向代理?
  7. 为什么还有那么多人用SVN?
  8. 5G时代到来,那我们现在用的4G手机怎么办?
  9. codeblock无法新建工程_龙园路顶管工程顶管机顺利始发,项目预计明年5月完工...
  10. sql关于视图的sql_学习SQL:SQL视图