import json from django.http import HttpResponse from django.shortcuts import render, redirect from demo.forms import UserForm from demo.models import Subject, Teacher, User, proto def login(request): if request.method.lower() == 'get': return render(request, 'demo/login.html', {}) else: username = request.POST['username'] try: user = User.objects.get(username__exact=username) password = request.POST['password'] hasher = proto.copy() hasher.update(password.encode('utf-8')) if hasher.hexdigest() == user.password: request.session['user'] = user return redirect('sub') except User.DoesNotExist: pass return render(request, 'demo/login.html', {'hint': '用户名或密码错误'}) def register(request): form = UserForm() if request.method.lower() == 'get': return render(request, 'demo/register.html', {'f': form}) else: ctx = {} try: form = UserForm(request.POST) ctx['f'] = form if form.is_valid(): form.save(commit=True) ctx['hint'] = '注册成功请登录!' return render(request, 'demo/login.html', ctx) except: ctx['hint'] = '注册失败, 请重新尝试!' return render(request, 'demo/register.html', ctx) def check_username(request): ctx = {} if 'username' in request.GET: username = request.GET['username'] try: User.objects.get(username__exact=username) ctx['valid'] = False except User.DoesNotExist: ctx['valid'] = True return HttpResponse(json.dumps(ctx), content_type='application/json; charset=utf-8') def show_subjects(request): if 'user' in request.session and request.session['user']: ctx = {'subjects_list': Subject.objects.all()} return render(request, 'demo/subject.html', ctx) else: return render(request, 'demo/login.html', {'hint': '请先登录!'}) def show_teachers(request, no): if 'user' in request.session and request.session['user']: teachers = Teacher.objects.filter(subject__no=no)\ .select_related('subject') ctx = {'teachers_list': teachers} return render(request, 'demo/teacher.html', ctx) else: return render(request, 'demo/login.html', {'hint': '请先登录!'}) def make_comment(request, no): ctx = {'code': 200} if 'user' in request.session and request.session['user']: user = request.session['user'] if user.counter > 0: try: teacher = Teacher.objects.get(pk=no) if request.path.startswith('/good'): teacher.good_count += 1 ctx['result'] = f'好评({teacher.gcount})' else: teacher.bad_count += 1 ctx['result'] = f'差评({teacher.bcount})' teacher.save() user.counter -= 1 User.objects.filter(username__exact=user.username)\ .update(counter=user.counter) request.session['user'] = user except Teacher.DoesNotExist: ctx['code'] = 404 else: ctx['code'] = 403 ctx['result'] = '票数不足' else: ctx['code'] = 302 ctx['result'] = '请先登录' return HttpResponse(json.dumps(ctx), content_type='application/json; charset=utf-8')