Создание пользователя в django с помощью Rest Framework

Я видел, что люди используют различные способы создания пользователя в django Rest framework. я пробовал & ни один из них не работает для меня. иногда он говорит Ошибка ключа: Groups или что-то еще. поэтому я попробовал этот способ без is_valid & он работает как шарм. является ли этот способ безопасным для создания пользователя, или если нет, то почему & как я должен создавать пользователя в представлениях?

#my views.py

@api_view(['GET','POST'])
def getUserData(request):
    if request.method == 'POST':
        user = User.objects.create_user(
        username=request.data['username'],
        password=request.data['password'])
        serializer = userSerializer(user)
    return Response(serializer.data)

ну я бы хотел сначала использовать проверенные данные из сериализатора следующим образом:

@api_view(['GET','POST'])
def getUserData(request):
    if request.method == 'POST':
        serializer = userSerializer(user)
        username = serializer.validated_data.get('username')
        password = serializer.validated_data.get('password')
        user = User.objects.create_user(username=username, password=password)
    return Response(serializer.data)

измените вид, как показано ниже, это тоже работает,

    @api_view(["GET", "POST"])
def getUserData(request):
        if request.method == "POST":
            serializer = UserSerializer(data=request.data)
            if serializer.is_valid():
               serializer.save()
               return Response(serializer.data, status=status.HTTP_200_OK)
        return Response(status=status.HTTP_400_BAD_REQUEST)

здесь UserSerializer:

class UserSerializer(serializers.ModelSerializer):
    username=serializers.CharField()
    password=serializers.CharField()
    class Meta:
        model = User
        fields=['username','password']
        

и models.py (я использую пользовательскую модель пользователя, но без изменений от оригинальной модели пользователя, которая предоставляется самим Django):

from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    pass
Вернуться на верх