views.py 3.8 KB

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