Python-100-Days/Day41-55/code/hellodjango/demo/views.py

108 lines
3.6 KiB
Python

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')