Django基础篇(二)与mysql配合使用

  需求:模拟实现学员管理系统。<*_* 从基础做起>

  表结构如下: 班级/学生/老师

      班级表:  id     title

            1       xx

            2  xx

      学生表:  id    name   班级ID(foreign  key)

             1   xxx           1

            2   xxx            2

      老师表:  id    name

            1      xxxx

            2  xxx

      老师班级关系表(多对多):

            id   tid(教师id)    cid (班级id)

            1       1                  1

            1       2                 2

            ......

1.单表操作

 1 import pymysql
 2   # 连接mysql
 3     conn = pymysql.connect(host=‘127.0.0.1‘, port=3306,         user=‘root‘, password=‘root123456‘, db=‘studentManager‘,
 4                            charset=‘utf8‘)
 5     # 此处的cursor 一定要写成字典类型. 否则查询结构 返回元祖类型
 6     cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
 7     cursor.execute(‘select id,title from class‘)
 8     # 返回多个值
 9     class_list = cursor.fetchall()
10     cursor.close()
11     conn.close()
12     return render(request, ‘classes.html‘, {‘class_list‘: class_list})    

连接mysql

  踩坑1:携带查询结果无法在页面上通过循环渲染?

  # 通过情况下连接惯性写的是

  错误写法:cursor = conn.cursor () # 此处这样写cursor查询结束会将结果封装成元祖类型... 之后通过for循环取值就稳凉...

  正确写法:cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 此处这样写cursor查询结果会封装成字典类型. 取值so esay...

  --------------------------------------------------------------------------------------------

  踩坑2:return render(request, ‘classes.html‘, {‘class_list‘: class_list}) 为撒第一个参数request飘红 ?

  麻溜溜去检查函数的形式参数中第一个参数是否写了request...

  整体单表操作的思路如下:通过form表单进行数据获取和传递到后台。注意事项有:

  1. 增、删、改操作结束后重定向到展示班级信息页;
  2. 携带id传递到后台,一波查询获取数据,返回到修改页.  

 1 # 显示班级列表
 2 # 参数列表上有一个request,切记,切记
 3 def classes(request):
 4     # 连接mysql
 5     conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, password=‘root123456‘, db=‘studentManager‘,
 6                            charset=‘utf8‘)
 7     # 此处的cursor 一定要写成字典类型. 否则查询结构 返回元祖类型
 8     cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
 9     cursor.execute(‘select id,title from class‘)
10     # 返回多个值
11     class_list = cursor.fetchall()
12     cursor.close()
13     conn.close()
14     return render(request, ‘classes.html‘, {‘class_list‘: class_list})

展示班级信息--->查

 1 def add_class(request):
 2     if request.method == ‘GET‘:
 3         return render(request, ‘add_class.html‘)
 4     else:
 5         conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, password=‘root123456‘, db=‘studentManager‘,
 6                                charset=‘utf8‘)
 7         cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
 8         v = request.POST.get(‘title‘)
 9         cursor.execute(‘insert into class(title) values (%s)‘, [v, ])
10         conn.commit()
11         cursor.close()
12         conn.close()
13         return redirect(‘/classes/‘)

添加班级信息--->增

 1 def edit_class(request):
 2     # 点击编辑按钮,根据Id获取到class信息 传入到下一个页面中
 3     if request.method == ‘GET‘:
 4         id = request.GET.get(‘nid‘)
 5         conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, password=‘root123456‘, db=‘studentManager‘,
 6                                charset=‘utf8‘)
 7         cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
 8         cursor.execute(‘select id,title from class where id = %s‘, [id, ])
 9         result = cursor.fetchone()
10         cursor.close()
11         conn.close()
12         return render(request, ‘edit_class.html‘, {‘result‘: result})
13     else:
14         id = request.POST.get(‘id‘)
15         title = request.POST.get(‘title‘)
16         conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, password=‘root123456‘, db=‘studentManager‘,
17                                charset=‘utf8‘)
18         cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
19         v = request.POST.get(‘title‘)
20         cursor.execute(‘update class set title =%s where id=%s‘, [title, id])
21         conn.commit()
22         cursor.close()
23         conn.close()
24         return redirect(‘/classes/‘)

编辑班级信息页--->查&改

 1 def del_class(request):
 2     id = request.GET.get(‘nid‘)
 3     conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, password=‘root123456‘, db=‘studentManager‘,
 4                            charset=‘utf8‘)
 5     cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
 6     cursor.execute(‘delete from class where id = %s‘, [id, ])
 7     conn.commit()
 8     cursor.close()
 9     conn.close()
10     return redirect(‘/classes/‘)

删除班级信息---->删

  注:对于单表操作表单信息量不是很大的情况下,使用Ajax操作会更加丝滑...

 

 

  

 

原文地址:https://www.cnblogs.com/shine-rainbow/p/9847633.html

时间: 2024-10-08 02:33:39

Django基础篇(二)与mysql配合使用的相关文章

JMS基础篇(二)

简介 异构集成是消息发挥作用的一个领域,大型公司内部可能会遇到很多的平台,Java,.net或者公司自己的平台等. 传送消息还应该支持异步机制,以提高系统整体的性能.异步传输一条消息意味着,发送者不必等到接收者接收或者处理消息,可以接着做后续的处理. 应用程序发送消息至另外一个应用程序,需要使用到消息中间件.消息中间件应提供容错,负载均衡,可伸缩的事务性等特性. JMS与JDBC类似,是一种与厂商无关的API.应用程序开发者可以使用同样的API来访问不同的系统. 可以认为JMS是一种标准,各消息

php基础篇-二维数组排序 array_multisort

原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(array1,sorting order, sorting type,array2,array3..)是对多个数组或多维数组进行排序的函数. array1 必需.规定输入的数组. sorting order 可选.规定排列顺序.可能的值是 SORT_ASC 和 SORT_DESC. sorting t

php基础篇-二维数组排序姐妹篇

前面介绍了php多维数组排序的一个函数array_multisort() ,想了解的人可以点击 二维数组排序 array_multisort 下面介绍下不适用array_multisort()进行多维数组的排序. 这里介绍下2个php排序函数,一个是asort,一个是arsort. asort(array,sorttype) 函数对数组进行排序并保持索引关系.主要用于对那些单元顺序很重要的结合数组进行排序. 可选的第二个参数包含了附加的排序标识. SORT_REGULAR - 默认.以它们原来的

Django(基础篇)

Gjango 解析 是一个可以使Web开发工作愉快并且高效的Web开发框架,使用Django,使你的能够一最小的代价创建和维护高质量的Web应用. Django相较与其他Web框架其优势:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 流程 Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持耦合关系,只是定义上有些许不同, Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模

Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编译,所以借此篇内容说明一下原由并为之后文章的学习做准备. 即使本片内容只是在围绕一个小小的HelloWorld程序开展,但还是希望朋友们不要急于求成,"欲速则不达". 文章整体思路: 我们循序渐进地来看,一个Qt应用的完成有以下一个重要的步骤: 项目创建->源码编译->程序运行

JavaScript笔记基础篇(二)

基础篇主要是总结一些工作中遇到的技术问题是如何解决的,应为本人属于刚入行阶段技术并非大神如果笔记中有哪些错误,或者自己的一些想法希望大家多多交流互相学习. 1.ToFixed()函数 今天在做Birt报表时, 要显示一列百分比的数据,但因一些特别的原因,不能使用使用百分比样式,即如果数据是0.9538不能显示成“95.38%”的样式,必须显示成“95.38”. 开始时想使用javascript的内置函数Math.round(),可Math.round()只能显示为整数,而不能保留小数. 再网上搜

通过Rancher部署并扩容Kubernetes集群基础篇二

接上一篇通过Rancher部署并扩容Kubernetes集群基础篇一 7. 使用ConfigMap配置redis https://github.com/kubernetes/kubernetes.github.io/blob/master/docs/user-guide/configmap/redis/redis-config redis-config maxmemory 2mb     maxmemory-policy allkeys-lru # kubectl create configma

Hybrid APP基础篇(二)-&gt;Native、Hybrid、React Native、Web App方案的分析比较

说明 Native.Hybrid.React.Web App方案的分析比较 目录 前言 参考来源 前置技术要求 楔子 几种APP开发模式 概述 Native App Web App Hybrid App React Native App 分析 各大开发模式直观对比 如何选择开发模式 另类的app方案 微网页 微信小程序 其它 前言 参考来源 前人栽树,后台乘凉,本文参考了以下来源 对当前主流hybrid app.web app与native app工具的初步比较与分析 H5.React Nati

Django基础篇之数据库选择及相关操作

在djanjo框架中我们最常用的框架分别就是mysql和sqlit了,下面我们将分别讲述一下这俩种数据库的基础必备知识 mysql 一.利用命令创建(在终端上执行) 1.首先创建一个project项目 djanjo-admin startproject project名字 2.创建app(首先必须利用cd切换到该project下面) Python3 startapp APP名字 3.运行程序 python3 manage.py runserver 127.0.0.1:8009 二.利用pycha