views.py 5.1 KB

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