api_user.py 2.9 KB

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