学生管理
学生表结构
class Student(models.Model):
name = models.CharField(max_length=32)
classes = models.ForeignKey(\'Classes\') # 关联班级
查询学生
URL设计:
urls.py的urlpatterns列表中增加如下url:
url(r\'^student_list/\', views.student_list, name=\'student_list\'),
视图函数:
def student_list(request):
student_obj_list = models.Student.objects.all()
return render(request, \'student_list.html\', {\'list\': student_obj_list})
student_list.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>列表展示</title>
</head>
<body>
<div>
<table border="1">
<thead>
<tr>
<th>序号</th>
<th>学生姓名</th>
<th>所属班级</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for obj in list %}
<tr>
<th>{{ obj.id }}</th>
<td>{{ obj.name }}</td>
<td>{{ obj.classes.name }}</td>
<td>
<a href="/edit_student/?id={{ obj.id }}">编辑</a> |
<a href="/del_student/?id={{ obj.id }}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</body>
</html>
新增学生
URL设计:
url(r\'^add_student/\', views.add_student, name=\'add_student\'),
视图函数:
def add_student(request):
# 定义错误信息
error_msg = \'\'
# 获取所有班级对象
class_obj_list = models.Classes.objects.all()
# 判读请求方式,POST请求保存在数据库
if request.method == \'POST\':
student_name = request.POST.get(\'student\')
class_id = request.POST.get(\'class_id\')
if student_name:
models.Student.objects.create(name=student_name, classes_id=class_id)
return redirect(\'/student_list/\')
else:
error_msg = \'学生姓名不能为空,请重新输入\'
class_obj_list = models.Classes.objects.all()
return render(request, \'add_student.html\', {\'list\': class_obj_list, \'error_msg\': error_msg})
add_student.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>增加学生</title>
</head>
<body>
<div style="margin-top: 10px">
<form action="" method="post">
<p>
<label for="student">学生姓名:</label>
<input type="text" id="student" name="student">
</p>
<p>
<label for="class">所属班级:</label>
<select name="class_id" id="class">
{% for class in list %}
<option value="{{ class.id }}">{{ class.name }}</option>
{% endfor %}
</select>
</p>
<p>
<button type="submit">提交</button>
</p>
</form>
{% if error_msg %}
<p style="color: red">{{ error_msg }}</p>
{% endif %}
</div>
</body>
</html>
注意:
提交POST请求前注释掉settings.py文件中45行上下的 \'django.middleware.csrf.CsrfViewMiddleware\',
或者在HTML代码的form标签内加上 {% csrf_token %}的标签。二者选一即可提交POST请求。
另:可在student_list.html的代码中添加一个a标签: <a href="/add_student/">新页面添加</a>
删除学生
URL设计:
url(r\'^del_student/\', views.del_student, name=\'del_student\'),
视图函数:
def del_student(request):
student_id = request.GET.get(\'id\')
del_list = models.Student.objects.filter(id=student_id)
if del_list:
del_list.delete()
return redirect(\'/student_list/\')
else:
return HttpResponse(\'删除错误\')
HTML部分:
在学生列表的表格中添加删除的a标签。
<a href="/del_student/?id={{ obj.id }}">删除</a>
编辑学生
URL设计:
url(r\'^edit_student/\', views.edit_student, name=\'edit_student\'),
视图函数:
def edit_student(request):
error_msg = \'\'
student_id = request.GET.get(\'id\')
student_obj = models.Student.objects.filter(id=student_id).first()
classes_list = models.Classes.objects.all()
if request.method == \'POST\':
student_name = request.POST.get(\'student_name\')
class_id = request.POST.get(\'class_id\')
if student_name:
student_obj.name = student_name
student_obj.classes_id = class_id
student_obj.save()
return redirect(\'/student_list/\')
else:
error_msg = \'学生姓名不能为空,请重新输入\'
return render(request, \'edit_student.html\',
{\'student_obj\': student_obj, \'classes_list\': classes_list, \'error_msg\': error_msg})
HTML部分:
在学生列表的表格中添加编辑的a标签。
<a href="/edit_student/?id={{ obj.id }}">编辑</a>
edit_student.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>修改学生</title>
</head>
<body>
<div style="margin-top: 10px">
<form action="" method="post">
<p>
<label for="student">学生姓名:</label>
<input type="text" id="student" name="student_name" value="{{ student_obj.name }}">
</p>
<p>
<label for="class">所属班级:</label>
<select name="class_id" id="class">
{% for class in classes_list %}
{% if student_obj.classes_id == class.id %}
<option selected value="{{ class.id }}">{{ class.name }}</option>
{% else %}
<option value="{{ class.id }}">{{ class.name }}</option>
{% endif %}
{% endfor %}
</select>
</p>
<p>
<button type="submit" class="btn btn-default">提交</button>
</p>
</form>
{% if error_msg %}
<p style="color: red">{{ error_msg }}</p>
{% endif %}
</div>
</body>
</html>