api_user.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. from django.contrib import auth
  2. from rest_framework.views import APIView
  3. from rest_framework.authtoken.models import Token
  4. from rest_framework.authentication import BasicAuthentication, TokenAuthentication
  5. from .serializers import UserRegisterSerializer
  6. from django.middleware.csrf import get_token
  7. from django.contrib.auth import login
  8. from api.models import User
  9. from django.contrib.auth.hashers import make_password , check_password
  10. from api.utils import *
  11. class UserRegisterAPI(APIView):
  12. authentication_classes = []
  13. permission_classes = []
  14. def get(self, request):
  15. csrf_token = get_token(request)
  16. response = Response({'csrftoken': csrf_token})
  17. # response["Access-Control-Allow-Origin"] = "*"
  18. return response
  19. def post(self, request):
  20. serializer = UserRegisterSerializer(data=request.data)
  21. if serializer.is_valid():
  22. newuser = serializer.save()
  23. token = Token.objects.create(user=newuser)
  24. # 注册完,同时将用户登录
  25. auth.login(request, newuser)
  26. return success(message="用户注册成功", data={
  27. "username": newuser.username,
  28. "displayname": newuser.displayname,
  29. "token": token.key,
  30. 'identity': newuser.identity,
  31. },code=201)
  32. # 处理错误信息
  33. errors = {}
  34. for field, field_errors in serializer.errors.items():
  35. if isinstance(field_errors, list):
  36. errors[field] = field_errors[0]
  37. print(field_errors)
  38. if field_errors[0].code == 'unique':
  39. errors[field] = str("用户名已存在")
  40. else:
  41. errors[field] = str(field_errors)
  42. return failed(message="注册失败", data=errors, code=400)
  43. class UserLoginAPI(APIView):
  44. authentication_classes = []
  45. permission_classes = []
  46. def get(self, request):
  47. csrf_token = get_token(request)
  48. response = Response({'csrftoken': csrf_token})
  49. # response["Access-Control-Allow-Origin"] = "*"
  50. return response
  51. def post(self, request):
  52. username = request.data.get('username')
  53. password = request.data.get('password')
  54. user = auth.authenticate(request, username=username, password=password)
  55. if user:
  56. auth.login(request, user)
  57. if Token.objects.filter(user=user).exists():
  58. token = Token.objects.get(user=user).key
  59. else:
  60. token = Token.objects.create(user=user).key
  61. return success(message="登录成功", data={
  62. 'username': user.username,
  63. 'displayName': user.displayname,
  64. 'token': token,
  65. 'identity': user.identity,
  66. }, code=201)
  67. else:
  68. return failed(message="登录失败", data="用户名不存在,或密码错误", code=401)
  69. class getDashboard(APIView):
  70. def post(self, request):
  71. return Response({
  72. 'data': 'yes'
  73. })
  74. #查询用户信息
  75. class UserSelectAPI(APIView):
  76. def get(self, request):
  77. user = request.user
  78. return success(message="查询用户信息成功", data = {
  79. 'username': user.username,
  80. 'displayname': user.displayname,
  81. 'createtime': user.create_time,
  82. 'identity': user.identity,
  83. 'lastlogin': user.last_login
  84. }, code=200)
  85. #修改用户信息
  86. class UserUpdateAPI(APIView):
  87. def post(self, request):
  88. try:
  89. user = request.user
  90. user.username = request.data.get('username')
  91. user.displayname = request.data.get('displayname')
  92. user.identity = request.data.get('identity')
  93. user.save()
  94. return success(message="修改用户信息成功", data = {
  95. 'username': user.username,
  96. 'displayname': user.displayname,
  97. 'createtime': user.create_time,
  98. 'identity': user.identity,
  99. 'lastlogin': user.last_login
  100. }, code=200)
  101. except Exception as e:
  102. return failed(message="修改用户信息失败", code=400)
  103. #修改用户密码
  104. class PassUpdateAPI(APIView):
  105. def post(self, request):
  106. try:
  107. user = request.user
  108. password = make_password(
  109. request.data.get("oldPassword"),
  110. salt='vrviewer',
  111. hasher='pbkdf2_sha256'
  112. )
  113. if(check_password(request.data.get("oldPassword") , user.password)):
  114. user.password = make_password(
  115. request.data.get("newPassword"),
  116. salt='vrviewer',
  117. hasher='pbkdf2_sha256'
  118. )
  119. user.save()
  120. return success(message="用户密码修改成功", code=200)
  121. else:
  122. return failed(message="用户密码修改失败,原密码错误", code=400)
  123. except Exception as e:
  124. return failed(message="用户密码修改失败", code=400)