1.urls.py from django.contrib import admin from django.urls import path from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path('students/', views.students), path('add_student/', views.add_student), path('del_student/', views.del_student), path('edit_student/', views.edit_student), ] 2.sqlhelper.py import pymysql def get_list(sql,args): conn = pymysql.connect( host='localhost', port=3306, user='root', password='123', database='django_test', charset='utf8' ) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute(sql,args) result = cursor.fetchall()#[{k1:v1,k2:v2,k3:v3},{k1:v1,k2:v2,k3:v3}] cursor.close() conn.close() return result def get_one(sql,args): conn = pymysql.connect( host='localhost', port=3306, user='root', password='123', database='django_test', charset='utf8' ) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute(sql,args) result = cursor.fetchone()#{k1:v1,k2:v2,k3:v3} cursor.close() conn.close() return result def modify(sql,args): conn = pymysql.connect( host='localhost', port=3306, user='root', password='123', database='django_test', charset='utf8' ) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute(sql,args) conn.commit() cursor.close() conn.close() 3.views.py from app01 import sqlhelper from django.shortcuts import render,redirect #学生列表 def students(request): result = sqlhelper.get_list('select students.id,students.name,classes.title from students left join classes on students.class_id = classes.id',[]) return render(request,'students.html',{'result':result}) #添加学生 def add_student(request): if request.method == 'GET': classes = sqlhelper.get_list('select id,title from classes',[]) return render(request,'add_student.html',{'classes':classes}) else: name = request.POST.get('name') class_id = request.POST.get('class_id') if name.strip(): sqlhelper.modify('insert into students(name,class_id) values(%s,%s) ',[name,class_id]) return redirect('/students/') else: classes = sqlhelper.get_list('select id,title from classes', []) return render(request, 'add_student.html', {'classes': classes,'name_error':'姓名不能为空'}) #删除学生 def del_student(request): nid = request.GET.get('nid') sqlhelper.modify('delete from students where id=%s',[nid]) return redirect('/students/') #编辑学生 def edit_student(request): if request.method == 'GET': nid = request.GET.get('nid') students = sqlhelper.get_one('select id,name,class_id from students where id=%s',[nid]) classes = sqlhelper.get_list('select id,title from classes',[]) return render(request,'edit_student.html',{'students':students,'classes':classes}) else: nid = request.GET.get('nid') name = request.POST.get('name') class_id = request.POST.get('class_id') if name.strip(): sqlhelper.modify('update students set name=%s,class_id=%s where id=%s',[name,class_id,nid]) return redirect('/students/') else: students = sqlhelper.get_one('select id,name,class_id from students where id=%s', [nid]) classes = sqlhelper.get_list('select id,title from classes', []) return render(request, 'edit_student.html', {'students': students, 'classes': classes,'name_error':'姓名不能为空'})
4.students.html
<body> <h1>学生列表</h1> <a href="/add_student/">添加</a> <table border="1"> <thead> <tr> <th>id</th> <th>name</th> <th>title</th> <th>操作</th> </tr> </thead> <tbody> {% for row in result %} <tr> <td>{{ row.id }}</td> <td>{{ row.name }}</td> <td>{{ row.title }}</td> <td> <a href="/edit_student/?nid={{ row.id }}">编辑</a> | <a href="/del_student/?nid={{ row.id }}">删除</a> </td> </tr> {% endfor %} </tbody> </table> </body>
5.add_student.html
<body> <h1>添加学生</h1> <form method="POST" action="/add_student/"> <p>姓名: <input type="text" name="name"> <span style="color:red">{{ name_error }}</span> </p> <p>班级: <select name="class_id"> {% for row in classes %} <option value="{{ row.id }}">{{ row.title }}</option> {% endfor %} </select> </p> <p> <input type="submit" value="提交"> </p> </form> </body>
6.edit_student.html
<body> <h1>编辑学生</h1> <form method="POST" action="/edit_student/?nid={{ students.id }}"> <p>姓名: <input type="text" name="name" value="{{ students.name }}"> <span style="color:red">{{ name_error }}</span> </p> <p>班级: <select name="class_id"> {% for row in classes %} <!--如果学生表的班级id等于班级表的id,就选中该学生所在的班级显示出来--> {% if students.class_id == row.id %} <option selected value="{{ row.id }}">{{ row.title }}</option> {% else %} <option value="{{ row.id }}">{{ row.title }}</option> {% endif %} {% endfor %} </select> </p> <p> <input type="submit" value="提交"> <a href="/students/">取消</a> </p> </form> </body>