Django小项目练习
Django学生管理系统
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^class_list/', views.class_list), url(r'^add_class/', views.add_class), url(r'^edit_class/(\d+)/', views.edit_class), url(r'^student_list/', views.student_list), url(r'^add_student/', views.add_student), url(r'^edit_student/(\d+)/', views.edit_student), url(r'^teacher_list/', views.teacher_list), url(r'^add_teacher/', views.add_teacher), url(r'^edit_teacher/(\d+)/', views.edit_teacher), ]
from django.shortcuts import render,redirect,HttpResponse from app01 import models from django.forms import Form from django.forms import fields from django.forms import widgets from django.forms import models as form_model from django.core.exceptions import ValidationError from django.core.validators import RegexValidator class ClassForm(Form): title = fields.RegexField('全栈\d+') def class_list(request): cls_list = models.Classes.objects.all() return render(request,'class_list.html',{'cls_list':cls_list}) def add_class(request): if request.method == "GET": obj = ClassForm() return render(request,'add_class.html',{'obj': obj}) else: obj = ClassForm(request.POST) if obj.is_valid(): # obj.cleaned_data # 字典 # 数据库创建一条数据 # print(obj.cleaned_data) # models.Classes.objects.create(title=obj.cleaned_data['tt']) models.Classes.objects.create(**obj.cleaned_data) return redirect('/class_list/') return render(request,'add_class.html',{'obj': obj}) def edit_class(request,nid): if request.method == "GET": row = models.Classes.objects.filter(id=nid).first() # 让页面显示初始值 # obj = ClassForm(data={'title': 'asdfasdfasdfas'}) obj = ClassForm(initial={'title': row.title}) return render(request,'edit_class.html',{'nid': nid,'obj':obj}) else: obj = ClassForm(request.POST) if obj.is_valid(): print(obj.cleaned_data) models.Classes.objects.filter(id=nid).update(**obj.cleaned_data) return redirect('/class_list/') return render(request,'edit_class.html',{'nid': nid,'obj':obj}) class StudentForm(Form): name = fields.CharField( min_length=2, max_length=6, widget=widgets.TextInput(attrs={'class': 'form-control'}) ) email = fields.EmailField(widget=widgets.TextInput(attrs={'class': 'form-control'})) age = fields.IntegerField(min_value=18,max_value=25,widget=widgets.TextInput(attrs={'class': 'form-control'})) cls_id = fields.IntegerField( # widget=widgets.Select(choices=[(1,'上海'),(2,'北京')]) widget=widgets.Select(choices=models.Classes.objects.values_list('id','title'),attrs={'class': 'form-control'}) ) def student_list(request): stu_list = models.Student.objects.all() return render(request,'student_list.html',{'stu_list':stu_list}) def add_student(request): if request.method == "GET": obj = StudentForm() return render(request,'add_student.html',{'obj':obj}) else: obj = StudentForm(request.POST) if obj.is_valid(): models.Student.objects.create(**obj.cleaned_data) return redirect('/student_list/') return render(request,'add_student.html',{'obj':obj}) def edit_student(request,nid): if request.method == "GET": row = models.Student.objects.filter(id=nid).values('name','email','age','cls_id').first() obj = StudentForm(initial=row) return render(request,'edit_student.html',{'nid':nid,'obj': obj}) else: obj = StudentForm(request.POST) if obj.is_valid(): models.Student.objects.filter(id=nid).update(**obj.cleaned_data) return redirect('/student_list/') return render(request,'edit_student.html',{'nid':nid,'obj': obj}) class TeacherForm(Form): tname = fields.CharField(min_length=2) xx = fields.MultipleChoiceField( # choices=models.Classes.objects.values_list("id","title"), widget=widgets.SelectMultiple ) def __init__(self,*args,**kwargs): super(TeacherForm,self).__init__(*args,**kwargs) self.fields["xx"].choices =models.Classes.objects.values_list("id","title") def teacher_list(request): tea_list = models.Teacher.objects.all() # tea_class = tea_list.c2t.all() # print(tea_class) return render(request,"teacher_list.html",{"tea_list":tea_list}) def add_teacher(request): if request.method == "GET": obj = TeacherForm() # # print(obj.xx) # print(obj.tname) return render(request,"add_teacher.html",{"obj":obj}) else: obj = TeacherForm(request.POST) if obj.is_valid(): print(obj.cleaned_data) xx = obj.cleaned_data.pop("xx") row = models.Teacher.objects.create(**obj.cleaned_data) row.c2t.add(*xx) return redirect("/teacher_list/") return render(request,"add_teacher.html",{"obj":obj}) def edit_teacher(request,tid): if request.method == "GET": row = models.Teacher.objects.filter(id=tid).first() class_ids = row.c2t.values_list("id") print(class_ids) print(list(zip(*class_ids))) id_list = list(zip(*class_ids))[0] if list(zip(*class_ids)) else [] obj = TeacherForm(initial={'tname':row.tname,'xx':id_list}) return render(request,'edit_teacher.html',{'obj':obj,"tid":tid}) else: obj = TeacherForm(request.POST) if obj.is_valid(): print(obj.cleaned_data) xx = obj.cleaned_data.pop("xx") row = models.Teacher.objects.create(**obj.cleaned_data) row.c2t.add(*xx) return redirect("/teacher_list/") else: print("111") return render(request, 'edit_teacher.html', {'obj': obj, "tid": tid})
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>班级列表</h1> <div> <a href="/add_class/">添加</a> </div> <ul> {% for row in cls_list %} <li>{{ row.title }} <a href="/edit_class/{{ row.id }}/">编辑</a> </li> {% endfor %} </ul> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>添加班级</h1> <form method="POST" action="/add_class/" novalidate> {% csrf_token %} {{ obj.title }} {{ obj.errors.title.0 }} <input type="submit" value="提交" /> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>编辑班级</h1> <form method="POST" action="/edit_class/{{ nid }}/"> {% csrf_token %} <p> {{ obj.title }} {{ obj.errors.title.0 }} </p> <input type='submit' value="提交" /> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>学生列表</h1> <a href="/add_student/">添加</a> <ul> {% for row in stu_list %} <li>{{ row.name }}-{{ row.email }}-{{ row.age }}-{{ row.cls_id }}-{{ row.cls.title }} <a href="/edit_student/{{ row.id }}/">编辑</a></li> {% endfor %} </ul> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>添加学生</h1> <form action="/add_student/" method="POST"> {% csrf_token %} <p> 学生名称:{{ obj.name }} </p> <p> 学生邮箱:{{ obj.email }} </p> <p> 学生年龄:{{ obj.age }} </p> <p> 班级:{{ obj.cls_id }} </p> <input type="submit" value="提交" /> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"/> </head> <body> <div style="width: 500px;margin: 0 auto;"> <form class="form-horizontal" method="POST" action="/edit_student/{{ nid }}/"> {% csrf_token %} <div class="form-group"> <label class="col-sm-2 control-label">姓名:</label> <div class="col-sm-10"> {{ obj.name }} </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">邮箱:</label> <div class="col-sm-10"> {{ obj.email }} </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">年龄:</label> <div class="col-sm-10"> {{ obj.age }} </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">班级:</label> <div class="col-sm-10"> {{ obj.cls_id }} </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <input type="submit" class="btn btn-default" value="提交" /> </div> </div> </form> </div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>老师列表</h1> <div> <a href="/add_teacher/">增加</a> </div> <table border="1"> <thead> <tr> <th>ID</th> <th>老师名称</th> <th>任教老师</th> <th>操作</th> </tr> </thead> <tbody> {% for row in tea_list %} <tr> <td>{{ row.id }}</td> <td>{{ row.tname }}</td> <td> {% for row in row.c2t.all %} {{ row.title }} {% endfor %} </td> <td> <a href="/edit_teacher/{{ row.id }}">编辑</a> </td> </tr> {% endfor %} </tbody> </table> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/add_teacher/" method="POST"> {% csrf_token %} <p> 姓名: {{ obj.tname }} </p> <p> 班级 {{ obj.xx }} </p> <input type="submit" value="提交"> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>编辑老师</h3> <form action="/edit_teacher/{{ tid }}/" novalidate method="POST"> {% csrf_token %} <p> {{ obj.tname }} </p> <p> {{ obj.xx }} </p> <input type="submit" value="提交"> </form> </body> </html>
Django学生管理系统(使用AJAX实现模态对话框)
1. 一对一 班级 模态增加 编辑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .hide{ display: none; } .shadow{ position: fixed; left: 0; top: 0; right: 0; bottom: 0; background-color: black; opacity: 0.4; z-index: 999; } .modal{ z-index: 1000; position: fixed; left: 50%; top: 50%; height: 300px; width: 400px; background-color: white; margin-left: -200px; margin-top: -150px; } .del_class{ z-index: 1001; position: fixed; left: 50%; top: 50%; height: 150px; width: 300px; background-color: white; margin-left: -150px; margin-top: -75px; } .edit_class{ z-index: 1002; position: fixed; left: 50%; top: 50%; height: 150px; width: 300px; background-color: white; margin-left: -150px; margin-top: -75px; } </style> </head> <body> <h1>班级列表</h1> <div> <a onclick="showModal();">模态框增加</a> </div> <table border="1px"> <thead> <tr> <td>ID</td> <td>班级名称</td> <td>模态操作</td> </tr> </thead> <tbody> {% for row in data %} <tr> <td>{{ row.cid }}</td> <td>{{ row.title }}</td> <td> <a onclick="modelEdit(this)">编辑</a> <a onclick="DelClass({{ row.cid }})">删除</a> </td> </tr> {% endfor %} </tbody> </table> {# 遮罩#} <div id="shadow" class="shadow hide"></div> {# 增加#} <div id="addmodal" class="modal hide"> <p>班级名称: <input id="addtitle" type="text" name="title" /> </p> <input type="button" value="提交" onclick="AjaxSend();" /><span id="errormsg"></span> <input type="button" value="取消" onclick="cancleModal();" /> </div> {# 编辑#} <div id="editModal" class="modal hide"> <h3>编辑</h3> <input id="editId" type="text" name="id" style="display: none"> <p>班级名称<input id="editTitle" type="text" name="title" ></p> <input type="button" value="提交" onclick="editAjaxSend()"><span id="errormsg"></span> <input type="button" value="取消" onclick="cancleModal()"> </div> <script src="/static/jquery-3.2.1.js"></script> <script> {# 增加#} function showModal() { $("#addmodal,#shadow").removeClass("hide"); } function AjaxSend() { title=$("#addtitle").val(); $.ajax({ url: '/motai_add_class/', type: 'POST', data: {'title': title}, success: function(arg){ arg = JSON.parse(arg); if(arg.status){ location.reload(); }else{ alert(arg.message); } } }) } {# 编辑#} function modelEdit(self) { $("#editModal,#shadow").removeClass("hide"); var title=$(self).parent().prevAll().eq(0).text(); var id=$(self).parent().prevAll().eq(1).text(); $("#editTitle").val(title); $("#editId").val(id); } function editAjaxSend() { id = $("#editId").val(); title = $("#editTitle").val(); $.ajax({ url: '/modal_edit_class/', type: 'POST', data: {"id":id,"title": title}, success: function(arg){ arg = JSON.parse(arg); if(arg.status){ location.reload(); }else{ alert(arg.message); } } }) } {# 隐藏#} function cancleModal() { $("#shadow").addClass("hide"); $("#addmodal").addClass("hide"); $("#editModal").addClass("hide") } </script> </body> </html>
def classes(request): data = sqlheper.get_list("select cid,title from class",[]) return render(request, "classes.html", {"data": data}) def motai_add_class(request): ret = {'status': True, 'message': None} title = request.POST.get('title') try: nid = request.POST.get('nid') content = request.POST.get('content') sqlheper.motify_sql('insert into class(title) values(%s)',[title,]) except Exception as e: ret['status'] = False ret['message'] = "处理异常" return HttpResponse(json.dumps(ret)) def modal_edit_class(request): print(request.POST) ret = {'status': True, 'message':None} try: id = request.POST.get('id') title = request.POST.get('title') sqlheper.motify_sql('update class set title=%s where cid=%s',[title,id,]) except Exception as e: ret['status'] = False ret['message'] = "处理异常" return HttpResponse(json.dumps(ret))
2.一对多 学生班级 模态增加 编辑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .hide{ display: none; } .shadow{ position: fixed; top: 0; bottom: 0; left: 0; right: 0; background-color: black; z-index: 999; opacity: 0.4; } .Modal{ position: fixed; top: 50%; left: 50%; width: 400px; height: 300px; margin-left: -200px; margin-top: -150px; z-index: 1000; background-color: white; } </style> </head> <body> <h1>班级学员</h1> <div> <a id="addStudent">模态框增加</a> </div> <table border="1px"> <thead> <tr> <td>学员名称</td> <td>学生名称</td> <td>班级名称</td> <td>模态操作</td> </tr> </thead> <tbody> {% for row in student_list %} <tr> <td>{{ row.sid }}</td> <td>{{ row.name }}</td> <td clsId="{{ row.class_id }}">{{ row.title }}</td> <td> <a class="btn-edit">编辑</a> <a >删除</a> </td> </tr> {% endfor %} </tbody> </table> <div id="shadow" class="shadow hide"></div> {#增加#} <div id="addModal" class="Modal hide"> <p>学生名称: <input id="add_name" type="text" name="add_name"> </p> <p>学生性别: <input id="add_sex" type="text" name="add_sex"> </p> <p>班级名称: <select id="add_classId" name="add_classId"> {% for row in class_list %} <option value="{{ row.cid }}">{{ row.title }}</option> {% endfor %} </select> </p> <input id="btnAdd" type="button" value="提交"><span id="addError"></span> <input id="btnCancle" type="button" value="取消"> </div> {#编辑#} <div id="editModal" class="Modal hide"> <h3>编辑学生信息</h3> <p> 姓名:<input id="editName" type="text" name="name" placeholder="姓名" /> <input type="text" id="editId" style="display: none" /> </p> <p> 班级: <select id="editClassId" name="classId"> {% for row in class_list %} <option value="{{ row.cid }}">{{ row.title }}</option> {% endfor %} </select> </p> <input id="btnEdit" type="button" value="更新" /> <span id="editError" style="color: red;"></span> <input id="btnCancle" type="button" value="取消" /> </div> <script src="/static/jquery-3.2.1.js"></script> <script> $(function () { {# 增加#} $("#addStudent").click(function () { $("#shadow,#addModal").removeClass("hide"); }); $("#btnCancle").click(function () { $("#shadow,#addModal").addClass("hide"); $("#editModal").addClass("hide"); }); $("#btnAdd").click(function () { var add_name=$("#add_name").val(); var add_age=$("#add_sex").val(); var add_classId=$("#add_classId").val(); $.ajax({ url:"/motai_add_student/", type:"POST", data:{"add_name":add_name,"add_age":add_age,"add_classId":add_classId}, success:function (arg) { arg = JSON.parse(arg); if (arg.status){ location.reload(); }else { $("#addError").text(arg.message); } } }) }); {# 编辑 #} $('.btn-edit').click(function(){ $('#shadow,#editModal').removeClass('hide'); var tds = $(this).parent().prevAll(); var studentId = $(tds[2]).text(); var studentName = $(tds[1]).text(); var classId = $(tds[0]).attr('clsid'); console.log(studentId,studentName,classId); $('#editId').val(studentId); $('#editName').val(studentName); $('#editClassId').val(classId); }); $('#btnEdit').click(function(){ $.ajax({ url:'/motai_edit_student/', type: 'POST', data: {'sid': $('#editId').val(), 'name':$('#editName').val(),'class_id': $('#editClassId').val()}, dataType: 'JSON', //JSON.parse(arg) success:function(arg){ if(arg.status){ location.reload(); }else{ $('#editError').text(arg.message); } } }) }); }) </script> </body> </html>
def student(request): student_list = sqlheper.get_list("select student.sid,student.name,student.class_id,class.title from student left join class on student.class_id=class.cid",[]) class_list = sqlheper.get_list("select cid,title from class",[]) return render(request, "student.html", {"student_list":student_list, "class_list":class_list}) def motai_add_student(request): print(request.POST) ret = {"status":True,"message":None} try: name = request.POST.get("add_name") age = request.POST.get("add_age") classId = request.POST.get("add_classId") sqlheper.motify_sql("insert into student(name,age,class_id) values(%s,%s,%s)",[name,age,classId,]) except Exception as e: ret["status"] = False ret["message"] = str(e) return HttpResponse(json.dumps(ret)) def motai_edit_student(request): ret = {'status': True,'message': None} try: print(request.POST) sid = request.POST.get('sid') name = request.POST.get('name') class_id = request.POST.get('class_id') sqlheper.motify_sql('update student set name=%s,class_id=%s where sid=%s',[name,class_id,sid,]) except Exception as e: ret['status'] = False ret['message'] = str(e) return HttpResponse(json.dumps(ret))
3.多对多 老师 班级 模态增加 编辑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .hide{ display: none; } .shadow{ position: fixed; top: 0; bottom: 0; left: 0; right: 0; background-color: black; z-index: 999; opacity: 0.4; } .Modal{ position: fixed; top: 50%; left: 50%; width: 400px; height: 300px; margin-left: -200px; margin-top: -150px; z-index: 1000; background-color: white; } </style> </head> <body> <h1>老师 班级管理</h1> <div> <a id="addModal">模态框增加</a> </div> <table border="solid" > <thead> <tr> <td>ID</td> <td>老师名称</td> <td>班级名称</td> <td>操作</td> </tr> </thead> <tbody> {% for row in teacher_list %} <tr> <td>{{ row.tid }}</td> <td>{{ row.name }}</td> <td> {% for item in row.titles %} {{ item }} {% endfor %} </td> <td> <a class="editModal">编辑</a> <a class="delModal">删除</a> </td> </tr> {% endfor %} </tbody> </table> <div id="shadow" class="shadow hide"></div> <div id="add_tea_cls" class="Modal hide"> <p>老师名称: <input id="add_name" type="text" name="add_name"> </p> <p>班级名称: <select id="add_classId" name="add_classId" multiple> {% for row in class_list %} <option value="{{ row.cid }}">{{ row.title }}</option> {% endfor %} </select> </p> <input id="btnAdd" type="button" value="提交"><span id="addError"></span> <input id="btnCancle" type="button" value="取消"> </div> <div id="edit_tea_cls" class="Modal hide"> <p>老师名称: <input id="add_name" type="text" name="add_name"> </p> <p>班级名称: <select id="add_classId" name="add_classId" multiple> {% for row in class_list %} <option value="{{ row.cid }}">{{ row.title }}</option> {% endfor %} </select> </p> <input id="btnEdit" type="button" value="提交"><span id="addError"></span> <input id="cacleEdit" type="button" value="取消"> </div> <script src="/static/jquery-3.2.1.js"></script> <script> $(function () { {# 增加#} $("#addModal").click(function () { $("#shadow,#add_tea_cls").removeClass("hide"); }); $("#btnCancle").click(function () { $("#shadow,#add_tea_cls").addClass("hide"); }); $("#btnAdd").click(function () { tname=$("#add_name").val(); class_list=$("#add_classId").val(); console.log(class_list) $.ajax({ url:"/new_teacher/", type:"POST", data:{"tname":tname,"class_list":class_list}, success:function (arg) { arg = JSON.parse(arg); if (arg.status){ location.reload(); }else { $("#addError").text(arg.message); } } }) }); {# 编辑#} $(".editModal").click(function () { $("#shadow").removeClass("hide"); $("#edit_tea_cls").removeClass("hide"); }); $("#cacleEdit").click(function () { $("#shadow,#edit_tea_cls").addClass("hide"); }); }) </script> </body> </html>
def teacher(request): teacher_list=sqlheper.get_list(""" select teacher.tid as tid,teacher.name,class.title from teacher left join teacher_class on teacher_class.teacher_id=teacher.tid left join class on class.cid=teacher_class.class_id""",[]) # print(teacher_list) result = {} for row in teacher_list: tid = row["tid"] if tid in result: result[tid]["titles"].append(row["title"]) else: result[tid] = {"tid":row["tid"],"name":row["name"],"titles":[row["title"],]} class_list = sqlheper.get_list("select cid,title from class",[]) return render(request, "teacher.html_模态增加 老师班级", {"teacher_list":result.values(), "class_list":class_list}) ###模态增加 def new_teacher(request): print(request.POST) ret = {'status': True, 'message': None} try: class_list=request.POST.getlist("class_list[]") tname=request.POST.get("tname") print(class_list) print(tname) teacher_id=sqlheper.get_IncrementId("insert into teacher(name) values(%s)",[tname,]) for item in class_list: sqlheper.motify_sql("insert into teacher_class(teacher_id,class_id) values(%s,%s)",[teacher_id,item,]) except Exception as e: ret['status'] = False ret['message'] = str(e) return HttpResponse(json.dumps(ret))
4.多对多 老师 班级 新url 增加 编辑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>老师 班级管理</h1> <div> <a href="/add_page_teacher/">增加</a> </div> <table border="solid" > <thead> <tr> <td>ID</td> <td>老师名称</td> <td>班级名称</td> <td>操作</td> </tr> </thead> <tbody> {% for row in teacher_list %} <tr> <td>{{ row.tid }}</td> <td>{{ row.name }}</td> <td> {% for item in row.titles %} {{ item }} {% endfor %} </td> <td> <a href="/edit_page_teacher/?tid={{ row.tid }}">编辑</a> <a >删除</a> </td> </tr> {% endfor %} </tbody> </table> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>增加老师</h1> <form action="/add_teacher/" method="POST"> <p>老师名称: <input type="text" name="name"></p> <input type="submit"> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>编辑老师班级</h3> <form action="/edit_page_teacher/?tnid={{ tname.tid }}" method="post"> <p>老师名称:<input type="text" name="name" value="{{ tname.name }}"></p> <p>班级名称: <select name="class_ids" multiple size="7"> {% for item in class_list %} {% if item.cid in class_ids %} <option selected value="{{ item.cid }}">{{ item.title }}</option> {% else %} <option value="{{ item.cid }}">{{ item.title }}</option> {% endif %} {% endfor %} </select> <p><input type="submit" value="提交"></p> </p> </form> </body> </html>
###网页显示 def teacher(request): teacher_list=sqlheper.get_list(""" select teacher.tid as tid,teacher.name,class.title from teacher left join teacher_class on teacher_class.teacher_id=teacher.tid left join class on class.cid=teacher_class.class_id""",[]) # print(teacher_list) result = {} for row in teacher_list: tid = row["tid"] if tid in result: result[tid]["titles"].append(row["title"]) else: result[tid] = {"tid":row["tid"],"name":row["name"],"titles":[row["title"],]} class_list = sqlheper.get_list("select cid,title from class",[]) return render(request, "teacher.html", {"teacher_list":result.values(), "class_list":class_list}) ###网页增加 def add_page_teacher(request): if request.method=="GET": obj = sqlheper.SqlHelper() class_list = obj.get_list("select cid,title from class",[]) obj.close() return render(request,"add_page_teacher.html",{"class_list":class_list}) else: name = request.POST.get("name") obj = sqlheper.SqlHelper() teacher_id = obj.get_lastrowid("insert into teacher(name) values(%s)",[name,]) obj.close() class_ids = request.POST.getlist("class_ids") print(class_ids) data_list = [] for cls_id in class_ids: temp = (teacher_id, cls_id,) data_list.append(temp) obj = sqlheper.SqlHelper() obj.multiple_modify('insert into teacher_class(teacher_id,class_id) values(%s,%s)', data_list) obj.close() return redirect('/teacher/') ###网页编辑 def edit_page_teacher(request): if request.method=="GET": teacher_id = request.GET.get("tid") obj = sqlheper.SqlHelper() tname = obj.get_one("select tid,name from teacher where tid=%s",[teacher_id,]) class_list = obj.get_list("select cid,title from class",[]) class_ids = obj.get_list("select class_id from teacher_class where teacher_id =%s",[teacher_id,]) obj.close() temp = [] for i in class_ids: temp.append(i['class_id']) return render(request,"edit_page_teacher.html",{ "tname":tname, "class_list":class_list, "class_ids":temp, }) else: tid=request.GET.get("tnid") name=request.POST.get("name") class_ids=request.POST.getlist("class_ids") obj = sqlheper.SqlHelper() obj.modify("update teacher set name=%s where tid=%s",[name,tid,]) obj.modify('delete from teacher_class where teacher_id=%s',[tid,]) data_list = [] for cls_id in class_ids: temp = (tid,cls_id) data_list.append(temp) obj.multiple_modify('insert into teacher_class(teacher_id,class_id) values(%s,%s)',data_list) obj.close() return redirect('/teacher/')
5.多对多 老师 班级 模态 增加 编辑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .hide{ display: none; } .shadow{ position: fixed; top: 0; bottom: 0; left: 0; right: 0; background-color: black; z-index: 999; opacity: 0.4; } .loading{ position: fixed; width: 32px; height: 32px; left: 50%; top:50%; margin-left: -16px; margin-top: -16px; background-color: rebeccapurple; background-image: url("/static/images/loading.gif") ; background-size: 100%; } .Modal{ position: fixed; top: 50%; left: 50%; width: 400px; height: 300px; margin-left: -200px; margin-top: -150px; z-index: 1000; background-color: white; } </style> <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css"> <link rel="stylesheet" href="/static/plugins/font-awesome-4.7.0/css/font-awesome.css"> </head> <body> <h1 >老师 班级管理</h1> <div class="btn btn-success"> <a id="addModal">模态框增加</a> </div> <table border="solid" class="table table-striped"> <thead> <tr> <td>ID</td> <td>老师名称</td> <td>班级名称</td> <td>操作</td> </tr> </thead> <tbody> {% for row in teacher_list %} <tr> <td>{{ row.tid }}</td> <td>{{ row.name }}</td> <td> {% for item in row.titles %} {{ item }} {% endfor %} </td> <td> <a class="editModal">编辑</a> <a class="delModal">删除</a> </td> </tr> {% endfor %} </tbody> </table> <div id="shadow" class="shadow hide"></div> <div id="loading" class="loading hide"></div> <div id="add_tea_cls" class="Modal hide"> <p>老师名称: <input id="add_name" type="text" name="add_name"> </p> <p>班级名称: <select id="add_classId" name="add_classId" multiple size="10"> </select> </p> <input id="btnAdd" type="button" value="提交"><span id="addError"></span> <input id="btnCancle" type="button" value="取消"> </div> <div id="edit_tea_cls" class="Modal hide"> <input type="text" id="hide_id" style="display: none"> <p>老师名称: <input id="edit_name" type="text" name="add_name"> </p> <p>班级名称: <select id="edit_classId" name="edit_classId" multiple size="10"> </select> </p> <input id="btnEdit" type="button" value="提交"><span id="addError"></span> <input id="cacleEdit" type="button" value="取消"> </div> <script src="/static/jquery-3.2.1.js"></script> <script> $(function () { {# 增加#} $("#addModal").click(function () { $("#shadow,#loading").removeClass("hide"); $.ajax({ url:"/get_all_class/", type:"GET", dataType:"JSON", success:function (arg) { $.each(arg,function (i,row) { var tag = $("<option>"); /*var tag = document.createElement('option');*/ tag.text(row.title); /*tag.innerHTML = row.title;*/ tag.prop("value",row.cid); $("#add_classId").append(tag); /*tag.setAttribute('value',row.id);*/ }); $('#loading').addClass('hide'); $('#add_tea_cls').removeClass('hide'); } }) }); $("#btnCancle").click(function () { $("#shadow,#add_tea_cls").addClass("hide"); }); $("#btnAdd").click(function () { var tname=$("#add_name").val(); var class_list=$("#add_classId").val(); console.log(class_list); $.ajax({ url:"/new_teacher/", type:"POST", data:{"tname":tname,"class_list":class_list}, dataType:"JSON", traditional: true, // 如果提交的数据的值有列表,则需要添加此属性 success:function (arg) { if (arg.status){ location.reload(); }else { alert(arg.message); } } }) }); {# 编辑#} $(".editModal").click(function () { $("#shadow,#loading").removeClass("hide"); var ids=$(this).parent().prevAll()[2]; var id=$(ids).text(); $("#hide_id").val(id); $.ajax({ url: "/edit_tea_cls/", type: "POST", dataType: "JSON", data:{"id":id}, success: function (arg) { class_list = arg[0]; teacher_info = arg[1]; class_lds = arg[2]; console.log(class_lds); $("#edit_classId").empty(); $.each(class_list, function (i, row) { var tag = $("<option>"); tag.text(row.title); tag.prop("value", row.cid); if(class_lds.indexOf(row.cid) == -1){ $("#edit_classId").append(tag); }else { tag.prop("selected","selected"); $("#edit_classId").append(tag); } }); $("#edit_name").val(teacher_info["name"]); $('#loading').addClass('hide'); $('#edit_tea_cls').removeClass('hide'); } }); $("#cacleEdit").click(function () { $("#shadow,#edit_tea_cls").addClass("hide"); }); }) {# 编辑提交#} $("#btnEdit").click(function () { var tid= $("#hide_id").val(); var name = $("#edit_name").val(); var class_ids = $("#edit_classId").val(); $.ajax({ url:"/modal_edit_teacher/", type:"post", dataType:"JSON", traditional:true, data:{"tid":tid,"name":name,"del_class_id":del_class_id}, $.ajax({ url:"/modal_edit_teacher/", type:"post", dataType:"JSON", traditional:true, data:{"tid":tid,"name":name,"class_ids":class_ids}, success:function (arg) { if (arg.status){ location.reload(); }else { alert("111") } } }) }) }) }) </script> </body> </html>
#显示 def teacher(request): tk = request.COOKIES.get("ticket") if not tk: return redirect("/login/") teacher_list=sqlheper.get_list(""" select teacher.tid as tid,teacher.name,class.title from teacher left join teacher_class on teacher_class.teacher_id=teacher.tid left join class on class.cid=teacher_class.class_id""",[]) # print(teacher_list) result = {} for row in teacher_list: tid = row["tid"] if tid in result: result[tid]["titles"].append(row["title"]) else: result[tid] = {"tid":row["tid"],"name":row["name"],"titles":[row["title"],]} return render(request, "teacher.html", {"teacher_list":result.values()}) #增加 def get_all_class(request): import time time.sleep(1) obj = sqlheper.SqlHelper() class_list = obj.get_list('select cid,title from class',[]) obj.close() return HttpResponse(json.dumps(class_list)) def new_teacher(request): ret = {'status': True, 'message': None} try: class_list=request.POST.getlist("class_list") tname=request.POST.get("tname") teacher_id=sqlheper.get_IncrementId("insert into teacher(name) values(%s)",[tname,]) data_list = [] for cls_id in class_list: temp = (teacher_id,cls_id,) data_list.append(temp) obj = sqlheper.SqlHelper() obj.multiple_modify('insert into teacher_class(teacher_id,class_id) values(%s,%s)', data_list) obj.close() except Exception as e: ret['status'] = False ret['message'] = str(e) return HttpResponse(json.dumps(ret)) #编辑 def edit_tea_cls(request): id = request.POST.get("id") obj = sqlheper.SqlHelper() class_list = obj.get_list('select cid,title from class',[]) teacher_info = obj.get_one("select tid,name from teacher where tid=%s",[id,]) class_id = obj.get_list("select class_id from teacher_class where teacher_id=%s",[id,]) data_list = [] for cls_id in class_id: data_list.append(cls_id["class_id"]) print(teacher_info) total = [] total.append(class_list) total.append(teacher_info) total.append(data_list) obj.close() return HttpResponse(json.dumps(total)) def modal_edit_teacher(request): ret = {'status': True, 'message': None} try: name = request.POST.get("name") tid = request.POST.get("tid") class_ids = request.POST.getlist("class_ids") obj = sqlheper.SqlHelper() obj.modify("update teacher set name=%s where tid=%s", [name, tid, ]) obj.modify('delete from teacher_class where teacher_id=%s', [tid, ]) data_list = [] for cls_id in class_ids: temp = (tid, cls_id) data_list.append(temp) obj.multiple_modify('insert into teacher_class(teacher_id,class_id) values(%s,%s)', data_list) obj.close() except Exception as e: ret['status'] = False ret['message'] = str(e) return HttpResponse(json.dumps(ret))
Django 相亲小项目
用户登录 如果男用户登录,显示女生列表
如果女用户登录,显示男生列表
from django.shortcuts import render,HttpResponse,redirect from app01 import models def login(request): if request.method == "GET": return render(request,"login.html") else: username = request.POST.get("username") password = request.POST.get("password") gender = request.POST.get("gender") if gender == "1": obj = models.Boy.objects.filter(username=username,password=password).first() else: obj = models.Girl.objects.filter(username=username,password=password).first() if not obj: #未登录 return render(request,"login.html",{"msg":"用户名或密码错误"}) else: request.session["user_info"] = {"user_id":obj.id,"gender":gender,"username":username,"nickname":obj.nickname} return redirect("/index.html") def logout(request): if request.session.get("user_info"): request.session.clear() return redirect("/login.html")
from django.shortcuts import render,HttpResponse,redirect from app01 import models def index(request): if not request.session.get("user_info"): return redirect("/login.html") else: gender = request.session.get("user_info").get("gender") if gender == "1": user_list = models.Girl.objects.all() else: user_list = models.Boy.objects.all() return render(request,"index.html",{"user_list":user_list}) def others(request): current_user_id = request.session.get("user_info").get("user_id") gender = request.session.get("user_info").get("gender") if gender == "1": user_list = models.B2G.objects.filter(b_id=current_user_id).values("g__nickname") else: user_list = models.B2G.objects.filter(g_id=current_user_id).values("b__nickname") return render(request,"other.html",{"user_list":user_list}) def test(request): # models.Boy.objects.create(nickname="方少伟",username="fsw",password="123") # models.Boy.objects.create(nickname="陈涛",username="ct",password="123") # models.Boy.objects.create(nickname="egon",username="egon",password="123") # # models.Girl.objects.create(nickname="lili", username="lili", password="123") # models.Girl.objects.create(nickname="jim", username="jim", password="123") # models.Girl.objects.create(nickname="xiaojie", username="xiaojie", password="123") # models.B2G.objects.create(b_id=1,g_id=1) # models.B2G.objects.create(b_id=1,g_id=2) # models.B2G.objects.create(b_id=1,g_id=3) # models.B2G.objects.create(b_id=2,g_id=1) # models.B2G.objects.create(b_id=3,g_id=1) # models.B2G.objects.create(b_id=4,g_id=1) return HttpResponse("...")
from django.db import models # Create your models here. class Boy(models.Model): nickname = models.CharField(max_length=32) username = models.CharField(max_length=32) password = models.CharField(max_length=64) class Girl(models.Model): nickname = models.CharField(max_length=32) username = models.CharField(max_length=32) password = models.CharField(max_length=64) class B2G(models.Model): b = models.ForeignKey(to="Boy",to_field="id") g = models.ForeignKey(to="Girl",to_field="id")
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^test.html$', love.test), url(r'^login.html$', account.login), url(r'^logout.html$', account.logout), url(r'^index.html$', love.index), url(r'^others.html$', love.others), ]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/login.html" method="POST"> {% csrf_token %} <p>用户:<input type="text" name="username"></p> <p>密码:<input type="password" name="password"></p> <p> 性别: 男<input type="radio" name="gender" value="1"> 女<input type="radio" name="gender" value="2"> </p> <input type="submit" value="提交">{{ msg }} </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% include "user_head.html" %} <h3>异性列表</h3> <a href="/others.html">查看和我有关系的异性</a> <ul> {% for row in user_list %} <li>{{ row.nickname }}</li> {% endfor %} </ul> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% include "user_head.html" %} <h3>有关系的异性列表</h3> <ul> {% for row in user_list %} {% if row.g__nickname %} <li>{{ row.g__nickname }}</li> {% else %} <li>{{ row.b__nickname }}</li> {% endif %} {% endfor %} </ul> </body> </html>
<h3>当前用户: {{ request.session.user_info.nickname }}</h3> <a href="/logout.html">注销</a>