serializers.py

  1. from django.contrib.auth import get_user_model
  2. from rest_framework import serializers
  3. User = get_user_model()
  4. class AuthUserSerializer(serializers.ModelSerializer):
  5. username = serializers.CharField(max_length=15)
  6. phone = serializers.CharField(max_length=11, min_length=11, error_messages={
  7. "errorMsg": 'check your phone length, that must be 11'
  8. }, required=False)
  9. password = serializers.CharField(max_length=128, required=True)
  10. class Meta:
  11. model = User
  12. fields = ["username", "phone", "password"]
  13. # fields = '__all__'

views.py

  1. from django.contrib.auth import get_user_model
  2. from django.db.utils import IntegrityError
  3. from rest_framework.response import Response
  4. from rest_framework_simplejwt.tokens import RefreshToken
  5. from rest_framework.mixins import CreateModelMixin
  6. from rest_framework import viewsets
  7. from rest_framework import status
  8. from django.contrib.auth.hashers import make_password
  9. from User.serializers import (
  10. AuthUserSerializer
  11. )
  12. User = get_user_model()
  13. class UserViewSet(CreateModelMixin, viewsets.GenericViewSet):
  14. """
  15. 用户
  16. """
  17. serializer_class = AuthUserSerializer
  18. queryset = User.objects.all()
  19. def create(self, request, *args, **kwargs):
  20. serializer = self.get_serializer(data=request.data)
  21. serializer.is_valid(raise_exception=True)
  22. try:
  23. user = self.perform_create(serializer)
  24. except IntegrityError:
  25. response = {
  26. 'success': False,
  27. 'errorMsg': 'username is exits'
  28. }
  29. return Response(response, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
  30. ret_dict = serializer.data
  31. refresh = RefreshToken.for_user(user)
  32. access_token = str(refresh.access_token)
  33. response = {
  34. 'success': True,
  35. 'msg': {
  36. 'user_name': ret_dict['username'],
  37. 'token': access_token,
  38. 'refresh': str(refresh)
  39. }
  40. }
  41. ret_dict["token"] = access_token
  42. headers = self.get_success_headers(serializer.data)
  43. return Response(response, status=status.HTTP_201_CREATED, headers=headers)
  44. def perform_create(self, serializer):
  45. # 在注册用户时,一定要用django自带的make_password来修改password,不然登录的时候没法验证
  46. password = make_password(serializer.validated_data.get('password'))
  47. return serializer.save(password=password)

urls.py

  1. from django.contrib import admin
  2. from django.urls import path
  3. from User.register.view import UserViewSet
  4. urlpatterns = [
  5. path('register', UserViewSet.as_view({"post": "create"}), name='register')
  6. ]

怎么自测就不多说了