終端中cd
到當前文件路徑下,輸入python3 manage.py startapp app01
項目目錄結構
手動再數據庫中添加一條班級數據
Navicat Premium 手動添加一條班級數據
班級列表
編寫urls.py
文件,
urlpatterns = [
# 班級
path('class/',views.classes),
]
在app01
文件夾下views.py
添加對應的班級列表函數
# 班級列表
import SQLHelper
def classes(request):
obj = SQLHelper()
class_list = obj.get_list("select id,name from class")
obj.close()
return render(request, 'classes.html', {"class_list": class_list})
創建班級列表頁面classes.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>班級列表</title>
</head>
<body style="margin: 30px">
<div>
<h3>班級列表</h3>
<a href="/addclass" >添加班級</a>
<table class="table">
<thead>
<tr>
<td>ID</td>
<td>班級名稱</td>
<td>操作</td>
</tr>
</thead>
<tbody>
<!-- class_list 就是views.py中的 classes 函數中的class_list -->
<!-- 模板語言for循環 -->
{% for class in class_list %}
<tr>
<td>{{ class.id }}</td>
<td>{{ class.name }}</td>
<td>
<a href="\edit_class\?id={{ class.id }}" class="btn btn-info">編輯</a>
<a href="\delete_class\?id={{ class.id }}" class="btn btn-danger">刪除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</body>
</html>
班級列表(丑)
添加班級
編寫urls.py
文件,
urlpatterns = [
path('class/',views.classes), # 班級列表
path('addclass/',views.add_class), #添加班級
]
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>add_class</title>
</head>
<body>
<h1>添加班級</h1>
<!-- Form表單post方式提交數據到 addclass -->
<form action="/addclass/" method="post">
<p>班級名稱:<input type="text" name="name"></p>
<!-- msg 錯誤提示信息-->
<p>{{ msg }}</p>
<input type="submit" value="提交">
</form>
</body>
</html>
views.py
內編寫添加班級函數
# 添加班級
def add_class(request):
if request.method == 'GET':
#返回渲染添加班級頁面
return render(request, 'addclass.html')
else:
# 接收點擊提交按鈕的數據
v = request.POST.get('name')
if len(v) > 0:
obj = SQLHelper()
obj.modify("insert into class(name) values(%s)", [v, ])
obj.close()
return redirect('/class/')
else:
return render(request, 'addclass.html', {"msg": "班級名稱不能為空"})
添加班級
編輯班級
views.py
中編寫編輯班級函數。
urlpatterns = [
path('class/',views.classes),#班級列表
path('addclass/',views.add_class),#添加班級
path('edit_class/', views.edit_class),#編輯班級
]
edit_class.html
編輯班級頁面
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>編輯班級</title>
</head>
<body>
<h1>編輯班級</h1>
<div>
<p>原名:{{ result.name }}</p>
</div>
<!-- editClass函數需要用get方式接收參數 -->
<form action="/edit_class/?id={{ result.id }}" method="post">
<!-- editClass函數需要用post方式接收參數 -->
<!-- <input style="display: none" name="id" value="{{ result.id }}">#} -->
<p>改為:<input type="text" name="name"></p>
<input type="submit" value="提交">
</form>
</body>
</html>
views.py
中添加編輯班級的函數
# 編輯班級
def edit_class(request):
if request.method == "GET":
# 從classes.html中的編輯a標簽獲取到的數據
id = request.GET.get("id")
obj = SQLHelper()
result = obj.get_one("select id,name from class where id = %s", id)
obj.close()
return render(request, 'edit_class.html', {"result": result})
else:
id = request.GET.get("id")
# id = request.POST.get("id")
name = request.POST.get("name")
obj = SQLHelper()
obj.modify("update class set name = %s where id = %s", [name, id, ])
obj.close()
return redirect("/class/")
編輯班級
查看到編輯和刪除對應的id的值。
鼠標右鍵 - 檢查 ==> 班級列表
刪除班級
刪除班級不需要專門的刪除頁面。暫時就點擊刪除按鈕,直接刪除掉。
urls.py
中編寫刪除班級函數。
urlpatterns = [
path('class/',views.classes),#班級列表
path('addclass/',views.add_class),#添加班級
path('edit_class/', views.edit_class),#編輯班級
path('delete_class/',views.delete_class),#刪除班級
]
views.py
編輯刪除函數
# 刪除班級
def delete_class(request):
id = request.GET.get('id')
obj = SQLHelper()
obj.modify("delete from class where id=%s", id)
obj.close()
return redirect('/class/')
學生和老師的HTML代碼和班級的類似。直接貼其余全部代碼。
urls.py
urlpatterns = [
path('class/',views.classes),#班級列表
path('addclass/',views.add_class),#添加班級
path('edit_class/', views.edit_class),#編輯班級
path('delete_class/',views.delete_class),#刪除班級
# 學生
path('students/',views.students),
path('addStudent/',views.addStudent),
path('editStudent/',views.edit_student),
path('delete_student/',views.deleteStudent),
# 老師
path('tearchers/',views.tearchers),
path('addtearcher/',views.addtearchers),
path('editTearcher/',views.editTearcher),
path('deleteTearcher/',views.deleteTearcher),
]
views.py
# 學生列表
def students(request):
obj = SQLHelper()
student_list = obj.get_list("select student.id,student.sname,class.name,student.cid from student left join class on student.cid = class.id",
[])
class_list = obj.get_list('select id,name from class', [])
obj.close()
return render(request, "students.html", {"student_list": student_list, 'class_list': class_list})
# 添加學生
def addStudent(request):
if request.method == "GET":
obj = SQLHelper()
classes = obj.get_list("select id,name from class")
obj.close()
return render(request, "addStudent.html", {'classes': classes})
else:
class_id = request.POST.get("class_id")
sname = request.POST.get("sname")
obj = SQLHelper()
obj.modify("insert into student( sname, cid) value (%s,%s)", [sname, class_id])
obj.close()
return redirect("/students/")
# 刪除學生
def deleteStudent(request):
id = request.GET.get("id")
obj = SQLHelper()
obj.modify("delete from student where id = %s", id)
obj.close()
return redirect("/students/")
# 編輯學生
def edit_student(request):
if request.method == "GET":
id = request.GET.get("id")
obj = SQLHelper()
class_list = obj.get_list("select id,name from class", [])
student = obj.get_one(
"select student.id,student.sname,student.cid,class.name from student left join class on student.cid = class.id where student.id = %s",
id)
obj.close()
return render(request, "edit_student.html", {"student": student, "class_list": class_list})
else:
id = request.POST.get("id")
sname = request.POST.get("sname")
cid = request.POST.get("class_id")
obj = SQLHelper()
obj.modify("update student set sname = %s,cid = %s where id = %s", [sname, cid, id, ])
obj.close()
return redirect("/students/")
###老師列表
def tearchers(request):
obj = SQLHelper()
tearcher_list = obj.get_list('''
SELECT tearcher.tid,tearcher.tname,tearch2class.cid,class.name from tearcher
LEFT JOIN tearch2class on tearcher.tid = tearch2class.tid
LEFT JOIN class ON class.id = tearch2class.cid;
''', [])
result = {}
for tearcher in tearcher_list:
tid = tearcher['tid']
if tid in result:
result[tid]['classes'].append({'cid':tearcher['cid'],'name':tearcher['name']})
else:
result[tid] = {
'tid':tearcher['tid'],
'tname':tearcher['tname'],
'classes':[{'cid':tearcher['cid'],'name':tearcher['name']}],
}
class_list = obj.get_list('select * from class')
obj.close()
return render(request, 'tearchers.html', {'result': result.values(),"class_list":class_list})
# 添加老師
def addtearchers(request):
if request.method == 'GET':
obj = SQLHelper()
class_list = obj.get_list('select * from class')
obj.close()
return render(request,'addTearcher.html',{"class_list":class_list})
else:
tname = request.POST.get('tname')
clds = request.POST.getlist('class_ids')
obj = SQLHelper()
#老師表中添加數據 #獲取老師id
tearcher_id = obj.create('insert into tearcher(tname) values (%s)', [tname])
#老師班級表中插入數據
sql_args = []
for cid in clds:
temp = (tearcher_id,cid)
sql_args.append(temp)
obj.multiple_modify('insert into tearch2class(tid, cid) values (%s,%s)', sql_args)
obj.close()
return redirect('/tearchers/')
# 編輯老師
def editTearcher(request):
if request.method == 'GET':
tid = request.GET.get('tid')
obj = SQLHelper()
tearcher_info = obj.get_one('select tid,tname from tearcher where tid = %s',[tid])
tearcher_class_list = obj.get_list('select cid from tearch2class where tearch2class.tid = %s',[tid,])
class_list = obj.get_list('select id,name from class')
obj.close()
temp = []
for i in tearcher_class_list:
temp.append(i['cid'])
return render(request,'edit_tearcher.html',{
'info':tearcher_info,
'tearcher_class_list':temp,
'class_list':class_list
})
else:
tid = request.GET.get('tid')
class_ids = request.POST.getlist('class_ids')
tname = request.POST.get('tname')
#更新老師表
obj = SQLHelper()
obj.modify('update tearcher set tname=%s where tid = %s',[tname,tid])
#更細老師班級關系表
# 方案一:先刪除老師和班級的對應關系刪除,之后再做添加
obj.modify('delete from tearch2class where tid = %s',[tid])
sql_args = []
for cid in class_ids:
temp = (tid, cid)
sql_args.append(temp)
obj.multiple_modify('insert into tearch2class(tid, cid) values (%s,%s)', sql_args)
obj.close()
# 方案二:把新的班級數據和老的數據做對比進行刪除和增加
return redirect('/tearchers/')
# 刪除老師
def deleteTearcher(request):
tid = request.GET.get('tid')
obj = SQLHelper()
obj.modify('delete from tearcher where tid = %s', tid)
obj.modify('delete from tearch2class where tid = %s', tid)
obj.close()
return redirect('/tearchers/')