views.py 4.1 KB

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