views.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import json
  2. from django.http import HttpResponse
  3. from django.shortcuts import render, redirect
  4. from demo.forms import UserForm
  5. from demo.models import Subject, Teacher, User, proto
  6. def login(request):
  7. if request.method.lower() == 'get':
  8. return render(request, 'demo/login.html', {})
  9. else:
  10. username = request.POST['username']
  11. try:
  12. user = User.objects.get(username__exact=username)
  13. password = request.POST['password']
  14. hasher = proto.copy()
  15. hasher.update(password.encode('utf-8'))
  16. if hasher.hexdigest() == user.password:
  17. request.session['user'] = user
  18. return redirect('sub')
  19. except User.DoesNotExist:
  20. pass
  21. return render(request, 'demo/login.html',
  22. {'hint': '用户名或密码错误'})
  23. def register(request):
  24. form = UserForm()
  25. if request.method.lower() == 'get':
  26. return render(request, 'demo/register.html', {'f': form})
  27. else:
  28. ctx = {}
  29. try:
  30. form = UserForm(request.POST)
  31. ctx['f'] = form
  32. if form.is_valid():
  33. form.save(commit=True)
  34. ctx['hint'] = '注册成功请登录!'
  35. return render(request, 'demo/login.html', ctx)
  36. except:
  37. ctx['hint'] = '注册失败, 请重新尝试!'
  38. return render(request, 'demo/register.html', ctx)
  39. def check_username(request):
  40. ctx = {}
  41. if 'username' in request.GET:
  42. username = request.GET['username']
  43. try:
  44. User.objects.get(username__exact=username)
  45. ctx['valid'] = False
  46. except User.DoesNotExist:
  47. ctx['valid'] = True
  48. return HttpResponse(json.dumps(ctx),
  49. content_type='application/json; charset=utf-8')
  50. def show_subjects(request):
  51. if 'user' in request.session and request.session['user']:
  52. ctx = {'subjects_list': Subject.objects.all()}
  53. return render(request, 'demo/subject.html', ctx)
  54. else:
  55. return render(request, 'demo/login.html',
  56. {'hint': '请先登录!'})
  57. def show_teachers(request, no):
  58. if 'user' in request.session and request.session['user']:
  59. teachers = Teacher.objects.filter(subject__no=no)\
  60. .select_related('subject')
  61. ctx = {'teachers_list': teachers}
  62. return render(request, 'demo/teacher.html', ctx)
  63. else:
  64. return render(request, 'demo/login.html',
  65. {'hint': '请先登录!'})
  66. def make_comment(request, no):
  67. ctx = {'code': 200}
  68. if 'user' in request.session and request.session['user']:
  69. user = request.session['user']
  70. if user.counter > 0:
  71. try:
  72. teacher = Teacher.objects.get(pk=no)
  73. if request.path.startswith('/good'):
  74. teacher.good_count += 1
  75. ctx['result'] = f'好评({teacher.gcount})'
  76. else:
  77. teacher.bad_count += 1
  78. ctx['result'] = f'差评({teacher.bcount})'
  79. teacher.save()
  80. user.counter -= 1
  81. User.objects.filter(username__exact=user.username)\
  82. .update(counter=user.counter)
  83. request.session['user'] = user
  84. except Teacher.DoesNotExist:
  85. ctx['code'] = 404
  86. else:
  87. ctx['code'] = 403
  88. ctx['result'] = '票数不足'
  89. else:
  90. ctx['code'] = 302
  91. ctx['result'] = '请先登录'
  92. return HttpResponse(json.dumps(ctx),
  93. content_type='application/json; charset=utf-8')