Day42 of learning python --Django的增删改查操作
1.学员管理之数据库表结构设计
学生管理:
表:
班级
学生
老师
单表操作:
-增
-删
-改
-查
一对多操作:
-增
-删
-改
-查
多对多操作:
-增
-删
-改
-查
步骤: 1.在navicat上创建好数据库和数据表 2.在pycharm创建django项目,修改相关的配置 3.操作班级表的添加,删除和修改 遇到的小问题: 1.a标签的herf属性,form的action属性,需要与url的路由系统的网址一致才行,最后要加'/' 2.table的tbody中是先tr,在到td 3.记住http是短连接,如果有修改数据的时候必须要保存原来能够找到的元素属性
4.GET和POST是以字典的形式存储的
2.具体代码操作
文件:
url.py:
from django.contrib import admin from django.urls import path from app01 import views #设置专门的views.py文件用来存放url的响应函数,方便管理 urlpatterns = [ # path('admin/', admin.site.urls), path('classes/', views.classes), #查看班级,第一个完成的功能 path('add_class/', views.add_class), #添加班级 path('del_class/', views.del_class), #删除班级 path('edit_class/', views.edit_class), #编辑班级 ]
views.py:
from django.shortcuts import render,redirect import pymysql def classes(request): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='baicells', db='djangopratice',charset='utf8') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #以字典的形式连接 cursor.execute("select id,tittle from class") class_list = cursor.fetchall() # 得到的是一个带有字典的列表 cursor.close() conn.close() return render(request,'classes.html',{'class_list':class_list}) # 从数据库拿到的数据用来渲染html文件 def add_class(request): if request.method == "GET": #如果在classes.html页面上点添加的按钮,则跳到add_class.html的页面上 return render(request,'add_class.html') else: #add_class.html点击提交按钮,才到这一步,提交数据 print(request.POST) v = request.POST.get('tittle') #此处得到的是input框输入的数据,以name='tittle'的属性来识别的 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='baicells', db='djangopratice',charset='utf8') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute("insert into class(tittle) values(%s)",[v,]) conn.commit() cursor.close() conn.close() return redirect('/classes/') #再一次访问服务器,重新刷新获取数据 def del_class(request): #在classes.html上点击删除时,有a标签跳转URL,并发送过来URL的要删除的nid nid = request.GET.get('nid') conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='baicells', db='djangopratice',charset='utf8') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute("delete from class where id=%s", [nid, ]) conn.commit() cursor.close() conn.close() return redirect('/classes/') # 跳转到这个页面,重新刷新 def edit_class(request): if request.method == 'GET': # a标签的get请求,点击的编辑链接 nid = request.GET.get('nid') # 在classes.html上点击编辑时,有a标签跳转url,并发送过来的URL要编辑的nid,这样就知道了要编辑那个东西了 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='baicells', db='djangopratice', charset='utf8') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute("select id,tittle from class where id =%s",[nid,]) classone = cursor.fetchone() #获取数据用fetchone()得到一行的数据 cursor.close() conn.close() return render(request,'edit_class.html',{'classone':classone}) # 得到的数据,将edit_class.html进行渲染,因为要有保留的数据显示才能让客户知道是在编辑什么的 else: # nid = request.POST.get('nid') #点击提交edit_class.html的提交按钮 nid = request.GET.get('nid') # 由于http是短连接,所以需要从编辑的页面再次获得数据才能知道需要更改的地方,通过网址获取,form的action提交到那个网页的 tittle = request.POST.get('tittle') conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='baicells', db='djangopratice', charset='utf8') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute("update class set tittle=%s where id=%s",[tittle,nid]) conn.commit() cursor.close() conn.close() return redirect('/classes/')
classes.html:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Title</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> </head> <body> <h3>班级信息</h3> <div> <a href="/add_class/">添加</a> </div> <table border="1"> <thead> <tr> <th>id</th> <th>tittle</th> <th>操作</th> </tr> </thead> <tbody> {% for row in class_list %} 循环取数据,class_list是{'class_list':class_list}的key <tr> <td>{{ row.id }}</td> <td>{{ row.tittle }}</td> <td> <a href="/edit_class/?nid={{ row.id }}">编辑</a> | <a href="/del_class/?nid={{ row.id }}">删除</a> </td> </tr> {% endfor %} </tbody> </table> </body> </html>
add_class.html:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>add_class</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> </head> <body> <h3>添加班级</h3> <form action="/add_class/" method="POST" > <p>班级:<input type="text" name="tittle"></p> <input type="submit" value="提交"> </form> </body> </html>
edit_class.html:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>add_class</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> </head> <body> <h3>编辑班级</h3> <form action="/edit_class/?nid={{classone.id}}" method="POST" > <!--<p><input style="display: none" type="text" value={{ classone.id }} name="nid"></p> 一种方式利用form提交的方式,隐藏起来--> <p>班级:<input type="text" name="tittle" value={{ classone.tittle }}></p> <input type="submit" value="提交"> </form> </body> </html>

浙公网安备 33010602011771号