api_user.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. request.session.create()
  62. user.session_key = request.session.session_key
  63. user.save()
  64. return success(message="登录成功", data={
  65. 'username': user.username,
  66. 'displayName': user.displayname,
  67. 'token': token,
  68. 'identity': user.identity,
  69. }, code=201)
  70. else:
  71. return failed(message="登录失败", data="用户名不存在,或密码错误", code=401)
  72. class getDashboard(APIView):
  73. def post(self, request):
  74. return Response({
  75. 'data': 'yes'
  76. })
  77. #查询用户信息
  78. class UserSelectAPI(APIView):
  79. def get(self, request):
  80. user = request.user
  81. return success(message="查询用户信息成功", data = {
  82. 'username': user.username,
  83. 'displayname': user.displayname,
  84. 'createtime': user.create_time,
  85. 'identity': user.identity,
  86. 'lastlogin': user.last_login
  87. }, code=200)
  88. #修改用户信息
  89. class UserUpdateAPI(APIView):
  90. def post(self, request):
  91. try:
  92. user = request.user
  93. user.username = request.data.get('username')
  94. user.displayname = request.data.get('displayname')
  95. user.identity = request.data.get('identity')
  96. user.save()
  97. return success(message="修改用户信息成功", data = {
  98. 'username': user.username,
  99. 'displayname': user.displayname,
  100. 'createtime': user.create_time,
  101. 'identity': user.identity,
  102. 'lastlogin': user.last_login
  103. }, code=200)
  104. except Exception as e:
  105. return failed(message="修改用户信息失败", code=400)
  106. #修改用户密码
  107. class PassUpdateAPI(APIView):
  108. def post(self, request):
  109. try:
  110. user = request.user
  111. password = make_password(
  112. request.data.get("oldPassword"),
  113. salt='vrviewer',
  114. hasher='pbkdf2_sha256'
  115. )
  116. if(check_password(request.data.get("oldPassword") , user.password)):
  117. user.password = make_password(
  118. request.data.get("newPassword"),
  119. salt='vrviewer',
  120. hasher='pbkdf2_sha256'
  121. )
  122. user.save()
  123. return success(message="用户密码修改成功", code=200)
  124. else:
  125. return failed(message="用户密码修改失败,原密码错误", code=400)
  126. except Exception as e:
  127. return failed(message="用户密码修改失败", code=400)