serializers.py
from django.contrib.auth import get_user_modelfrom rest_framework import serializersUser = get_user_model()class AuthUserSerializer(serializers.ModelSerializer):username = serializers.CharField(max_length=15)phone = serializers.CharField(max_length=11, min_length=11, error_messages={"errorMsg": 'check your phone length, that must be 11'}, required=False)password = serializers.CharField(max_length=128, required=True)class Meta:model = Userfields = ["username", "phone", "password"]# fields = '__all__'
views.py
from django.contrib.auth import get_user_modelfrom django.db.utils import IntegrityErrorfrom rest_framework.response import Responsefrom rest_framework_simplejwt.tokens import RefreshTokenfrom rest_framework.mixins import CreateModelMixinfrom rest_framework import viewsetsfrom rest_framework import statusfrom django.contrib.auth.hashers import make_passwordfrom User.serializers import (AuthUserSerializer)User = get_user_model()class UserViewSet(CreateModelMixin, viewsets.GenericViewSet):"""用户"""serializer_class = AuthUserSerializerqueryset = User.objects.all()def create(self, request, *args, **kwargs):serializer = self.get_serializer(data=request.data)serializer.is_valid(raise_exception=True)try:user = self.perform_create(serializer)except IntegrityError:response = {'success': False,'errorMsg': 'username is exits'}return Response(response, status=status.HTTP_500_INTERNAL_SERVER_ERROR)ret_dict = serializer.datarefresh = RefreshToken.for_user(user)access_token = str(refresh.access_token)response = {'success': True,'msg': {'user_name': ret_dict['username'],'token': access_token,'refresh': str(refresh)}}ret_dict["token"] = access_tokenheaders = self.get_success_headers(serializer.data)return Response(response, status=status.HTTP_201_CREATED, headers=headers)def perform_create(self, serializer):# 在注册用户时,一定要用django自带的make_password来修改password,不然登录的时候没法验证password = make_password(serializer.validated_data.get('password'))return serializer.save(password=password)
urls.py
from django.contrib import adminfrom django.urls import pathfrom User.register.view import UserViewSeturlpatterns = [path('register', UserViewSet.as_view({"post": "create"}), name='register')]
怎么自测就不多说了
