You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from django.shortcuts import render, redirect
from django.http.response import HttpResponse
from constants import INVALID_KIND
from user.forms import StuLoginForm, TeaLoginForm
from user.cbvs import CreateStudentView, CreateTeacherView, UpdateStudentView, UpdateTeacherView
from user.models import Teacher, Student
def home(request):
return render(request, "user/login_home.html")
def login(request, *args, **kwargs):
# kind必须为"teacher"或"student"如果不是的话就会返回一个文本标明这不是一个合适的kind。
if not kwargs or "kind" not in kwargs or kwargs["kind"] not in ["teacher", "student"]:
return HttpResponse(INVALID_KIND)
kind = kwargs["kind"]
context = {"kind": kind}
if request.method == 'POST':
if kind == "teacher":
form = TeaLoginForm(data=request.POST)
else:
form = StuLoginForm(data=request.POST)
if form.is_valid():
uid = form.cleaned_data['uid']
if len(uid) != 10:
form.add_error("uid", "账号长度必须为10")
else:
if kind == "teacher":
department_no = uid[:3]
number = uid[3:]
object_set = Teacher.objects.filter(department_no=department_no, number=number)
else:
grade = uid[:4]
number = uid[4:]
object_set = Student.objects.filter(grade=grade, number=number)
if object_set.count() == 0:
form.add_error("uid", "该账号不存在")
else:
user = object_set[0]
if form.cleaned_data['password'] != user.password:
form.add_error("password", "密码不正确")
else:
request.session["kind"] = kind
request.session["user"] = uid
request.session['id'] = user.id
return redirect("course", kind=kind)
# 登录后会在cookie中存储以下信息
# kind: 用户类型,学生或老师
# user: 用户学号或教师编号
context['form'] = form
return render(request, "user/login_detail.html", context)
else:
context['form'] = form
elif request.method == 'GET':
if request.GET.get('uid'):
uid = request.GET.get('uid')
context['uid'] = uid
data = {'uid': uid, 'password': '123456789'}
if kind == 'teacher':
form = TeaLoginForm(data)
else:
form = StuLoginForm(data)
else:
if kind == 'teacher':
form = TeaLoginForm()
else:
form = StuLoginForm()
context['form'] = form
if request.GET.get('from_url'):
context['from_url'] = request.GET.get('from_url')
return render(request, 'user/login_detail.html', context)
def register(request, kind):
func = None
if kind == 'student':
func = CreateStudentView.as_view()
elif kind == 'teacher':
func = CreateTeacherView.as_view()
if func:
return func(request)
else:
return HttpResponse(INVALID_KIND)
# 退出登录的视图方法如下
def logout(request):
for sv in ["kind", "user", "id"]:
if request.session.get("sv"):
del request.session["sv"]
return redirect("login")
def update(request, kind):
func = None
if kind == "student":
func = UpdateStudentView.as_view()
elif kind == "teacher":
func = UpdateTeacherView.as_view()
else:
return HttpResponse(INVALID_KIND)
pk = request.session.get("id")
if pk:
context = {
"name": request.session.get("name", ""),
"kind": request.session.get("kind", "")
}
return func(request, pk=pk, context=context)
return redirect("login")