serializers.py
from django.contrib.auth import get_user_model
from rest_framework import serializers
User = 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 = User
fields = ["username", "phone", "password"]
# fields = '__all__'
views.py
from django.contrib.auth import get_user_model
from django.db.utils import IntegrityError
from rest_framework.response import Response
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework.mixins import CreateModelMixin
from rest_framework import viewsets
from rest_framework import status
from django.contrib.auth.hashers import make_password
from User.serializers import (
AuthUserSerializer
)
User = get_user_model()
class UserViewSet(CreateModelMixin, viewsets.GenericViewSet):
"""
用户
"""
serializer_class = AuthUserSerializer
queryset = 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.data
refresh = 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_token
headers = 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 admin
from django.urls import path
from User.register.view import UserViewSet
urlpatterns = [
path('register', UserViewSet.as_view({"post": "create"}), name='register')
]
怎么自测就不多说了