views.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. from django.shortcuts import render
  2. # Create your views here.
  3. from datetime import datetime, time
  4. from .models import User, LoginToken
  5. from django.http import JsonResponse
  6. from utils.decorators import debug_view
  7. from utils.http import make_json_response
  8. from .models import get_user
  9. from django.views.decorators.http import require_POST
  10. from .decorators import login_required
  11. def auth_with_username_or_email(username, password):
  12. if '@' in username:
  13. user = User.objects.get(email=username, password=password)
  14. else:
  15. user = User.objects.get(username=username, password=password)
  16. return user
  17. @debug_view('username', 'password', 'email')
  18. @require_POST
  19. def register(request):
  20. username = request.POST.get('username', '')
  21. password = request.POST.get('password', '')
  22. email = request.POST.get('email', '')
  23. if not username or not password or not email:
  24. return make_json_response(code=303, error='用户名/密码/邮箱不能为空')
  25. if User.objects.filter(username=username):
  26. return make_json_response(code=301, error='用户名已存在')
  27. if User.objects.filter(email=email):
  28. return make_json_response(code=302, error='邮箱已存在')
  29. try:
  30. User.objects.create(username=username, password=password, email=email)
  31. print('注册成功')
  32. return make_json_response()
  33. except Exception as e:
  34. return make_json_response(code=500, error=str(e))
  35. @debug_view('username', 'password')
  36. @require_POST
  37. def login(request):
  38. username = request.POST.get('username', '')
  39. password = request.POST.get('password', '')
  40. old_token = request.POST.get('token', '')
  41. try:
  42. user = auth_with_username_or_email(username, password)
  43. print(user)
  44. except:
  45. return make_json_response(code=303, error='用户名或密码错误')
  46. print(f'token = {old_token}')
  47. if user.check_token(old_token):
  48. try:
  49. user_token = user.tokens.get(token=old_token)
  50. print('已登录')
  51. user_token.delete()
  52. # return JsonResponse({'code': 303, 'msg': '已登录'}, status=303)
  53. except Exception as e:
  54. print('token无效')
  55. else:
  56. print('token已过期')
  57. user.last_login = datetime.now()
  58. token = user.make_token()
  59. user_token = LoginToken()
  60. user_token.user = user
  61. user_token.token = token
  62. user_token.save()
  63. print('登录成功')
  64. print(f'token = {token}')
  65. return make_json_response(token=token)
  66. @debug_view('username', 'token')
  67. @login_required
  68. def logout(request):
  69. user = get_user(request)
  70. data = request.POST
  71. token = data.get('token')
  72. user_token = user.tokens.get(token=token)
  73. user_token.delete()
  74. return make_json_response()
  75. @debug_view('username', 'email')
  76. @require_POST
  77. def send_email_verification_code(request):
  78. data = request.POST
  79. username = data.get('username')
  80. email = data.get('email')
  81. try:
  82. user = User.objects.get(username=username)
  83. except:
  84. return make_json_response(code=302, error='用户不存在')
  85. if user.email != email:
  86. return make_json_response(code=301, error='邮箱错误')
  87. try:
  88. # 发送验证码
  89. token = user.make_token()
  90. print(f'发送验证码 email = {user.email} token = {token}')
  91. user.send_email('ST网盘重置密码验证码', token)
  92. return make_json_response()
  93. except Exception as e:
  94. print(e)
  95. return make_json_response(code=500, error='验证码发送失败')
  96. @debug_view('username', 'token')
  97. @require_POST
  98. def check_token(request):
  99. data = request.POST
  100. username = data.get('username')
  101. token = data.get('token')
  102. try:
  103. user = User.objects.get(username=username)
  104. except:
  105. return make_json_response(code=302, error='用户不存在')
  106. print(f'token={token}')
  107. if token and user.check_token(token):
  108. print('验证码有效')
  109. return make_json_response()
  110. else:
  111. return make_json_response(code=303, error='验证码无效')
  112. @debug_view('username', 'password', 'token')
  113. @require_POST
  114. def reset_password(request):
  115. data = request.POST
  116. username = data.get('username')
  117. password = data.get('password')
  118. token = data.get('token')
  119. try:
  120. user = User.objects.get(username=username)
  121. except:
  122. return make_json_response(code=302, error='用户不存在')
  123. print(f'token={token}')
  124. if token and user.check_token(token):
  125. # 重置密码
  126. print("验证码有效")
  127. user.password = password
  128. user.save()
  129. return make_json_response()
  130. else:
  131. return make_json_response(code=303, error='验证码无效')