api_user.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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.utils import *
  9. class UserRegisterAPI(APIView):
  10. authentication_classes = []
  11. permission_classes = []
  12. def get(self, request):
  13. csrf_token = get_token(request)
  14. response = Response({'csrftoken': csrf_token})
  15. # response["Access-Control-Allow-Origin"] = "*"
  16. return response
  17. def post(self, request):
  18. serializer = UserRegisterSerializer(data=request.data)
  19. if serializer.is_valid():
  20. newuser = serializer.save()
  21. token = Token.objects.create(user=newuser)
  22. # 注册完,同时将用户登录
  23. auth.login(request, newuser)
  24. return success(message="用户注册成功", data={
  25. "username": newuser.username,
  26. "displayname": newuser.displayname,
  27. "token": token.key,
  28. 'identity': newuser.identity,
  29. },code=201)
  30. # 处理错误信息
  31. errors = {}
  32. for field, field_errors in serializer.errors.items():
  33. if isinstance(field_errors, list):
  34. errors[field] = field_errors[0]
  35. print(field_errors)
  36. if field_errors[0].code == 'unique':
  37. errors[field] = str("用户名已存在")
  38. else:
  39. errors[field] = str(field_errors)
  40. return failed(message="注册失败", data=errors, code=400)
  41. class UserLoginAPI(APIView):
  42. authentication_classes = []
  43. permission_classes = []
  44. def get(self, request):
  45. csrf_token = get_token(request)
  46. response = Response({'csrftoken': csrf_token})
  47. # response["Access-Control-Allow-Origin"] = "*"
  48. return response
  49. def post(self, request):
  50. username = request.data.get('username')
  51. password = request.data.get('password')
  52. user = auth.authenticate(request, username=username, password=password)
  53. if user:
  54. auth.login(request, user)
  55. if Token.objects.filter(user=user).exists():
  56. token = Token.objects.get(user=user).key
  57. else:
  58. token = Token.objects.create(user=user).key
  59. return success(message="登录成功", data={
  60. 'username': user.username,
  61. 'displayName': user.displayname,
  62. 'token': token,
  63. 'identity': user.identity,
  64. }, code=201)
  65. else:
  66. return failed(message="登录失败", data="用户名不存在,或密码错误", code=401)
  67. class getDashboard(APIView):
  68. def post(self, request):
  69. return Response({
  70. 'data': 'yes'
  71. })