gpt4 book ai didi

django - 如何使用 django Rest 框架和自定义用户模型创建新用户

转载 作者:行者123 更新时间:2023-12-02 15:43:38 24 4
gpt4 key购买 nike

我有一个自定义用户模型,我正在使用 django-rest-framework 来创建 API

模型.py:

class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
unique=True,
max_length=254,
)
first_name = models.CharField(max_length=15)
last_name = models.CharField(max_length=15)
mobile = models.IntegerField(unique=True)
date_joined = models.DateTimeField(default=timezone.now)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)

序列化器.py:

class UserSerializer(serializers.ModelSerializer):
password1 = serializers.CharField(write_only=True)
password2 = serializers.CharField(write_only=True)

class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'mobile', 'password1', 'password2')

views.py:

@api_view(['POST'])
@permission_classes((AllowAny,))
def create_user(request):
serialized = UserSerializer(data=request.data)
if serialized.is_valid():
User.objects.create_user(
serialized.save()
)
return Response(serialized.data, status=status.HTTP_201_CREATED)
else:
return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)

但是,当我尝试创建新用户时,出现此错误:

Got a TypeError when calling User.objects.create(). This may be because you have a writable field on the serializer class that is not a valid argument to User.objects.create(). You may need to make the field read-only, or override the UserSerializer.create() method to handle this correctly.

这可能是因为用户模型中没有password1 或password2 字段。但是,我如何创建一个 API 来使用 django-rest-framework 创建新用户?

最佳答案

我认为一个密码字段就足够了。如果要检查用户两次输入的密码是否相同,可以在前端进行。您可以从序列化程序重写 create 方法,如下所示。

from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)

class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'mobile', 'password')

def create(self, validated_data):
user = super(UserSerializer, self).create(validated_data)
user.set_password(validated_data['password'])
user.save()
return user

View .py

from rest_framework import generics
from rest_framework.permissions import AllowAny
from .models import User
from .serializers import UserSerializer

class UserCreateAPIView(generics.CreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = (AllowAny,)

关于django - 如何使用 django Rest 框架和自定义用户模型创建新用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43031323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com