views.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. def auth_with_username_or_email(username, password):
  8. if '@' in username:
  9. user = User.objects.get(email=username, password=password)
  10. else:
  11. user = User.objects.get(username=username, password=password)
  12. return user
  13. @api_view(['POST'])
  14. def register(request):
  15. username = request.data.get('username', '')
  16. password = request.data.get('password', '')
  17. email = request.data.get('email', '')
  18. try:
  19. User.objects.create(username=username, password=password, email=email)
  20. print('注册成功')
  21. return JsonResponse({'code': 200})
  22. except Exception as e:
  23. print(e)
  24. return JsonResponse({'code': 303, 'error': str(e)}, status=303)
  25. @api_view(['POST'])
  26. def login(request):
  27. username = request.data.get('username', '')
  28. password = request.data.get('password', '')
  29. token = request.data.get('token', '')
  30. try:
  31. user = auth_with_username_or_email(username, password)
  32. print(user)
  33. except Exception as e:
  34. print(e)
  35. print('用户名或密码错误')
  36. return JsonResponse({'code': 303, 'error': '用户名或密码错误'}, status=303)
  37. print(f'token = {token}')
  38. if user.check_token(token):
  39. try:
  40. user_token = user.tokens.get(token=token)
  41. print('已登录')
  42. user_token.delete()
  43. # return JsonResponse({'code': 303, 'msg': '已登录'}, status=303)
  44. except Exception as e:
  45. print('token无效')
  46. else:
  47. print('token已过期')
  48. user.last_login = datetime.now()
  49. new_token = user.make_token()
  50. user_token = LoginToken()
  51. user_token.user = user
  52. user_token.token = new_token
  53. user_token.save()
  54. if hasattr(request, '_user'):
  55. print('设置reqeust._user')
  56. request.user = user
  57. print('登录成功')
  58. print(f'new_token = {new_token}')
  59. return JsonResponse({'code': 200, 'token': new_token})
  60. @api_view(['POST'])
  61. def logout(request):
  62. username = request.data.get('username', '')
  63. token = request.data.get('token', '')
  64. try:
  65. user = User.objects.get(username=username)
  66. try:
  67. user_token = user.tokens.get(token=token)
  68. user_token.delete()
  69. except Exception as e:
  70. print(e)
  71. print('token无效')
  72. return JsonResponse({'code': 200})
  73. except Exception as e:
  74. print(e)
  75. return JsonResponse({'code': 303, 'error': str(e)}, status=303)
  76. @api_view(['POST'])
  77. def reset_password(request):
  78. username = request.data.get('username', '')
  79. password = request.data.get('password', '')
  80. try:
  81. user = User.objects.get(username=username)
  82. token = request.data.get('token')
  83. if token:
  84. print(f'token={token}')
  85. if user.check_token(token):
  86. # 重置密码
  87. print("验证码有效")
  88. user.password = password
  89. user.save()
  90. return JsonResponse({'code': 200})
  91. else:
  92. print("验证码无效")
  93. return JsonResponse({'code': 303, 'error': '验证码错误'}, status=303)
  94. else:
  95. # 发送验证码
  96. token = user.make_token()
  97. print(f'')
  98. print(f'发送验证码 email = {user.email} token = {token}')
  99. user.send_email('ST网盘重置密码验证码', token)
  100. return JsonResponse({'code': 200})
  101. except Exception as e:
  102. print(e)
  103. return JsonResponse({'code': 303, 'error': str(e)}, status=303)