Django--多对多表操作/通过母版渲染页面
发布时间:2020-12-20 10:58:39 所属栏目:Python 来源:网络整理
导读:目录 Django--多对多表操作+母版 需求 步骤 添加路由映射关系 老师表的增删改查 ajax操作老师表 Django--多对多表操作+母版 今天还以一个学生管理系统为例,先通过pymysql这个模块,进行多对多表操作,以下两种方式 新url的方式:直接新开一个页面进行操作 a
目录
Django--多对多表操作+母版今天还以一个学生管理系统为例,先通过pymysql这个模块,进行多对多表操作,以下两种方式
需求
步骤
添加路由映射关系urlpatterns = [ # 新url方式 url(r'^teachers/',teachers),url(r'^add_teacher/',add_teacher),url(r'^del_teacher/',del_teacher),url(r'^update_teacher/',update_teacher),# ajax方式 url(r'^ajax_add_teacher/',ajax_add_teacher),url(r'^ajax_update_teacher/',ajax_update_teacher),] 老师表的增删改查# students.html -- 通过继承layout.html页面 {% extends 'layout.html' %} {% block mycss %} <style> select { height: 34px; width: 203px; padding: 6px 12px; border: 1px solid #ccc; border-radius: 4px; background-color: #fff; } </style> {% endblock %} {% block mycontent %} <h3>学生表</h3> <table class="table table-hover table-bordered"> <tbody> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> <th>班级</th> <th>更新</th> <th>删除</th> </tr> {% for stu in students %} <tr> <td>{{ stu.sid }}</td> <td>{{ stu.name }}</td> <td>{{ stu.age }}</td> <td clsid="{{ stu.cid }}">{{ stu.cname }}</td> <td> <button class="btn btn-info"><a href="/update_student/?id={{ stu.sid }}" style="color: white;text-decoration: none;">更新</a></button> <button class="ajax_update btn btn-primary">ajax更新</button> </td> <td> <button class="btn btn-danger"><a href="/del_student/?id={{ stu.sid }}" class="delete" style="color: white;text-decoration: none;">删除</a></button> {# <button class="ajax_delete">ajax删除</button>#} </td> </tr> {% endfor %} </tbody> </table> <br><br> <button class="btn btn-info"><a href="/add_student/" style="color: white;text-decoration: none;">添加学生</a></button> <button id="ajax_add" class="btn btn-primary">ajax添加学生</button> {# 遮罩层 #} <div class="shadow"></div> {# 弹出框层 #} {# 增加学生 #} <div class="add_model"> {# <input type="hidden" name="class_id">#} <div> <h4 style="text-align: center; margin-top: 20px;">增加学生</h4> <hr> </div> <div class="model" style="margin-left: 120px"> 名字:<input type="text" name="name" id="add_student"><br> 年龄:<input type="text" name="age" id="add_age"><br> <div style="margin-top: 2px;margin-bottom: 2px"> 班级:<select name="add_cid" id="add_cid"> {% for class in classes %} <option value="{{ class.id }}">{{ class.cname }}</option> {% endfor %} </select></div> <span id="add_error" style="color:red; font-size: 12px; margin-bottom: 10px;"></span><br> <button id="add" class="btn btn-danger" style="margin-left: 48px;">添加</button> <button class="add_cancel btn btn-primary" style="margin-left: 40px;">取消</button> </div> </div> {# 更新学生 #} <div class="update_model"> <div> <h4 style="text-align: center; margin-top: 20px;">更新学生</h4> <hr> </div> <div class="model" style="margin-left: 120px"> <input type="hidden" name="sid" id="up_sid"> 姓名:<input type="text" name="name" id="up_name"><br> 年龄:<input type="text" name="age" id="up_age"> <div style="margin-top: 2px;margin-bottom: 2px"> 班级:<select name="up_cid" id="up_cid"> {% for class in classes %} <option value="{{ class.id }}">{{ class.cname }}</option> {% endfor %} </select> </div> <span id="up_error" style="color:red; font-size: 12px; margin-bottom: 10px;"></span><br> <button id="update" class="btn btn-danger" style="margin-left: 48px;">更新</button> <button class="up_cancel btn btn-primary" style="margin-left: 48px;">取消</button> </div> </div> {% endblock %} {% block myjs %} {# 删除学生 #} <script> $('.delete').click(function () { res = window.confirm('是否删除学生'); return res; }); </script> {# 增加学生 #} <script> $('#ajax_add').click(function () { $('.shadow,.add_model').css('display','block'); {#$('.shadow,.add_model').show()#} }); $('.add_cancel').click(function () { $('.shadow,.add_model').hide(); window.location.href = '/students/' }); $('#add').click(function () { var name = $('#add_student').val(); var age = $('#add_age').val(); var cid = $('#add_cid').val(); {#console.log(classname);#} $.ajax({ type: 'POST',url: '/ajax_add_student/',data: {'name': name,'age': age,'cid': cid},success: function (data) { var res = JSON.parse(data); if (res['code'] == 10000) { alert(res['msg']); window.location.href = '/students/'; } else { $('#add_error').text(res['msg']); } } }) }); </script> {# 更新学生 #} <script> $('.ajax_update').click(function () { $('.shadow,.update_model').show(); var info = $(this).parent().prevAll(); {#console.log(info)#} var age = info[1].innerText; var name = info[2].innerText; var id = info[3].innerText; var cid = $(info[0]).attr('clsid'); $('#up_age').val(age); $('#up_name').val(name); $('#up_sid').val(id); $('#up_cid').val(cid); }); $('.up_cancel').click(function () { $('.shadow,.update_model').hide(); window.location.href = '/students/'; }); $('#update').click(function () { var name = $('#up_name').val(); var age = $('#up_age').val(); var id = $('#up_sid').val(); var cid = $('#up_cid').val(); {#console.log(classname,id);#} $.ajax({ type: 'POST',url: '/ajax_update_student/',data: {'id': id,'name': name,success: function (data) { var res = JSON.parse(data); if (res['code'] == 10000) { alert(res['msg']); window.location.href = '/students/'; } else { $('#up_error').text(res['msg']); } } }) }); </script> {% endblock %} # add_student.html -- 通过继承layout.html页面 {% extends 'layout.html' %} {% block mycss %} <style> select { height: 34px; width: 203px; padding: 6px 12px; border: 1px solid #ccc; border-radius: 4px; background-color: #fff; } </style> {% endblock %} {% block mycontent %} <h3>增加老师</h3> <form action="/add_teacher/" method="post" class="form-inline"> 老师姓名:<input type="text" name="tname" class="form-control"><br> <div style="margin-top: 2px;margin-bottom: 10px"> 班级列表:<select name="cid" id="" multiple> {% for class in classes %} <option value="{{ class.id }}">{{ class.cname }}</option> {% endfor %} </select> </div> <span style="color:red; font-size: 12px;">{{ data }}</span><br> <span style="margin-left: 48px;"><input type="submit" value="添加" class="btn btn-danger"></span> <span style="margin-left: 40px;"> <button class="btn btn-primary"> <a href="/teachers/" style="color: white;text-decoration: none;">取消</a> </button> </span> </form> {% endblock %} # update_student.html -- 通过继承layout.html页面 {% extends 'layout.html' %} {% block mycss %} <style> select { height: 34px; width: 203px; padding: 6px 12px; border: 1px solid #ccc; border-radius: 4px; background-color: #fff; } </style> {% endblock %} {% block mycontent %} <h3>更新老师信息</h3> <form action="/update_teacher/" method="post" class="form-inline"> <input type="hidden" name="tid" value="{{ teacher.id }}"> 姓名:<input type=" text" class="form-control" name="tname" value="{{ teacher.tname }}"><br> <div style="margin-top: 2px;margin-bottom: 10px"> 班级:<select name="cid" id="" multiple> {% for class in classes %} <option value="{{ class.id }}">{{ class.cname }}</option> {% endfor %} </select></div> <span style="color:red; font-size: 12px;">{{ data }}</span><br> <span style="margin-left: 48px;"><input type="submit" value="更新" class="btn btn-danger"></span> <span style="margin-left: 40px;"> <button class="btn btn-primary"> <a href="/teachers/" style="color: white;text-decoration: none;">取消</a> </button> </span> </form> {% endblock %} # urls.py @deco def teachers(request): sql = 'select teachers.id as tid,tname,cname,cid from teachers left join teacher2class on teachers.id = teacher2class.tid left join classes on classes.id = teacher2class.cid order by tid' res = mysql(sql)[0] # print(res) sql = 'select * from classes' classes = mysql(sql)[0] teachers = {} # cids = {} for dic in res: if dic['tid'] in teachers: teachers[dic['tid']]['cname'].append(dic['cname']) # cids[dic['tid']]['cids'].append(dic['cid']) else: teachers[dic['tid']] = {'tid': dic['tid'],'tname': dic['tname'],'cname': [dic['cname'],]} # cids[dic['tid']] = {'classids': [dic['cid'],]} return render(request,'teachers.html',{'teachers': teachers.values(),'classes': classes}) @deco def add_teacher(request): sql = 'select * from classes' classes = mysql(sql)[0] if request.method == "GET": return render(request,'add_teacher.html',{'classes': classes}) else: tname = request.POST.get('tname') cids = request.POST.getlist('cid') if not (tname and cids): data = '姓名或班级不能为空' return render(request,{'classes': classes,'data': data}) sql = 'select * from teachers where tname=%s' res = mysql(sql,(tname,))[0] if res: data = '老师已存在' return render(request,'data': data}) sql = 'insert into teachers(tname) values(%s)' mysql(sql,)) sql = 'select id from teachers where tname=%s' tid = mysql(sql,))[0].get('id') # print(tid) # print(cids) for cid in cids: cid = int(cid) sql = 'insert into teacher2class(tid,cid) values (%s,%s)' mysql(sql,(tid,cid)) return redirect('/teachers/') @deco def del_teacher(request): # print(request) tid = request.GET.get('id') # print(tid) sql = 'delete from teacher2class where tid=%s' mysql(sql,)) sql = 'delete from teachers where id=%s' mysql(sql,)) return redirect('/teachers/') @deco def update_teacher(request): sql = 'select * from classes' classes = mysql(sql)[0] if request.method == 'GET': tid = request.GET.get('id') sql = 'select * from teachers where id=%s' teacher = mysql(sql,))[0] # print(teacher) return render(request,'update_teacher.html',{'teacher': teacher,'classes': classes}) else: id = request.POST.get('tid') tname = request.POST.get('tname') cids = request.POST.getlist('cid') sql = 'select * from teachers where id=%s' teacher = mysql(sql,(id,))[0] if not (tname and cids): data = '名字或班级不能为空' return render(request,'classes': classes,'data': data}) sql = 'select * from teachers where tname=%s and id != %s' res = mysql(sql,id))[0] if res: data = f'老师--{tname}--已存在' return render(request,'data': data}) sql = 'delete from teacher2class where tid=%s' mysql(sql,)) sql = 'update teachers set tname=%s where id=%s ' mysql(sql,id)) for cid in cids: cid = int(cid) sql = 'insert into teacher2class(tid,cid) values(%s,cid)) return redirect('/teachers/') ajax操作老师表# urls.py @deco def ajax_add_teacher(request): tname = request.POST.get('tname') cids = request.POST.getlist('cid') res = {'code': None,'msg': None} if not (tname and cids): res['code'] = 10001 res['msg'] = '姓名或班级不能为空' return HttpResponse(json.dumps(res)) sql = 'select * from teachers where tname=%s' resp = mysql(sql,))[1] if resp: res['code'] = 10001 res['msg'] = f'老师---{tname}-已存在' return HttpResponse(json.dumps(res)) sql = 'insert into teachers(tname) values(%s)' mysql(sql,)) sql = 'select id from teachers where tname=%s' tid = mysql(sql,))[0].get('id') # tid = mysql(sql,))[0] print(tid) for cid in cids: cid = int(cid) sql = 'insert into teacher2class(tid,%s)' mysql(sql,cid)) res['code'] = 10000 res['msg'] = f'老师--{tname}--信息添加成功' return HttpResponse(json.dumps(res)) @deco def ajax_update_teacher(request): id = request.POST.get('id') tname = request.POST.get('tname') cids = request.POST.getlist('cid') res = {'code': None,'msg': None} if not (tname and cids): res['code'] = 10001 res['msg'] = '名字或班级不能为空' return HttpResponse(json.dumps(res)) sql = 'select * from teachers where tname=%s and id!=%s' resp = mysql(sql,id))[0] if resp: res['code'] = 10001 res['msg'] = '老师已存在' return HttpResponse(json.dumps(res)) sql = 'delete from teacher2class where tid=%s' mysql(sql,)) sql = 'update teachers set tname=%s where id=%s ' mysql(sql,id)) for cid in cids: cid = int(cid) sql = 'insert into teacher2class(tid,cid)) res['code'] = 10000 res['msg'] = f'老师--{tname}--更新成功' return HttpResponse(json.dumps(res)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |