models :
from django.db import models
# Create your models here.
class Teacher(models.Model):
name = models.CharField(max_length=20, verbose_name='名字')
password = models.CharField(max_length=255, verbose_name='密码')
class Meta:
db_table = 'teacher'
class Student(models.Model):
name = models.CharField(max_length=20, verbose_name='名字')
age = models.CharField(max_length=100, verbose_name='年龄')
tid = models.ForeignKey(Teacher, on_delete=models.SET_NULL, null=True, blank=True)
class Meta:
db_table = 'student'
urls:
from django.contrib import admin
from django.urls import path
from app3 import views
urlpatterns = [
# path('admin/', admin.site.urls),
path('register', views.register),
path('login', views.login),
path('index', views.index),
path('show_student', views.show_student),
path('orphan', views.orphan),
path('del_stu', views.del_stu),
path('add_class', views.add_class),
]
views:
from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.contrib.auth.hashers import check_password, make_password
from . import models
# Create your views here.
# 老师注册视图
def register(request):
if request.method == 'GET':
return render(request, 'app3/register.html')
if request.method == 'POST':
name = request.POST.get('name')
pwd1 = request.POST.get('pwd1')
pwd2 = request.POST.get('pwd2')
# 数据完整性的判断
if all([name, pwd1, pwd2]):
if name:
if pwd1 == pwd2:
password = make_password(pwd1) # 哈希密码
models.Teacher.objects.create(
name=name,
password=password
)
else:
return HttpResponse('密码不同')
else:
return HttpResponse('账号未填写')
else:
return HttpResponse('数据不全')
return redirect('/app3/login')
# 登录
def login(request):
if request.method == 'GET':
return render(request, 'app3/login.html')
if request.method == 'POST':
name = request.POST.get('name')
pwd1 = request.POST.get('pwd1')
if all([name, pwd1]):
if name:
teacher = models.Teacher.objects.get(name=name)
if check_password(pwd1, teacher.password):
request.session['teachername'] = teacher.name
request.session['teacherid'] = teacher.id
return redirect('/app3/index')
else:
return HttpResponse('密码错误')
else:
return HttpResponse('账号错误')
# 首页展示
def index(request):
if request.method == 'GET':
id_ = request.session.get('teacherid')
tea = models.Teacher.objects.get(id=id_)
teacher = models.Teacher.objects.all()
teachername = request.session.get('teachername')
return render(request, 'app3/index.html', locals())
if request.method == 'POST':
name = request.POST.get('name')
age = request.POST['age']
id_ = request.session.get('teacherid')
tea = models.Teacher.objects.get(id=id_)
stu = models.Student.objects.create(
name=name,
age=age,
tid=tea
)
teacher = models.Teacher.objects.all()
teachername = request.session.get('teachername')
return render(request, 'app3/index.html', locals())
# 展示自身学生
def show_student(request):
id_ = request.session.get('teacherid')
tea = models.Teacher.objects.get(id=id_)
stu = tea.student_set.all()
return render(request, 'app3/show_student.html', locals())
# 展示未分班的学生
def orphan(request):
stu = models.Student.objects.filter(tid=None)
return render(request, 'app3/orphan.html', locals())
# 删除学生与老师的关联关系
def del_stu(request):
if request.method == 'GET':
id_ = request.GET.get('id')
stu = models.Student.objects.get(id=id_)
stu.tid = None
stu.save()
return redirect('/app3/index')
# 加入班级
def add_class(request):
id_ = request.session.get('teacherid')
teachaer = models.Teacher.objects.get(id=id_)
sid = request.GET.get('id')
stu = models.Student.objects.get(id=sid)
stu.tid = teachaer
stu.save()
return redirect('/app3/index')
html:
index:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>欢迎您 {{ teachername }}!</p>
<h1>学生信息录入</h1>
<form action="" method="post">
{% csrf_token %}
<label for="">学生姓名:</label>
<input type="text" name="name"><br>
<label for="">年龄:</label>
<input type="text" name="age"><br>
<button type="submit">提交</button>
</form>
<br>
<a href="/app3/show_student?id={{ tea.id }}">点击查看您班级的学生</a><br>
<a href="/app3/orphan">点击查看未分班的学生</a>
<h1>已经注册的老师有</h1>
{% for i in teacher %}
{{ i.name }}
{% endfor %}
</body>
</html>
login®ister:略
orphan:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>还未分班学生有:</p>
<table>
<tr>
<td>学生姓名</td>
<td>操作</td>
</tr>
{% for i in stu %}
<tr>
<td>{{ i.name }}</td>
<td><a href="add_class?id={{ i.id }}">加入班级</a></td>
</tr>
{% endfor %}
</table>
<br>
<a href="/app3/index">返回首页</a>
</body>
</html>
show_student:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>您的学生有:</p>
<table>
<tr>
<td>学生姓名</td>
<td>操作</td>
</tr>
{% for i in stu %}
<tr>
<td>{{ i.name }}</td>
<td><a href="del_stu?id={{ i.id }}">删除</a></td>
</tr>
{% endfor %}
</table>
<br>
<a href="/app3/index">返回首页</a>
</body>
</html>