API запрос должен принимать объект пользователя в качестве входных данных и обновлять пользователя

Задача состоит в том, чтобы создать конечную точку API "/updateUser" для обновления информации о пользователе. Запрос API должен принимать объект User в качестве входных данных и обновлять пользователя.

Моя модель такова:

class UserModel(AbstractUser):
    name = models.CharField(max_length=50)
    email = models.EmailField(max_length=50, unique=True, primary_key=True)
    phone = models.CharField(max_length=10, unique=True)
    gender = models.CharField(max_length=10, null=True)
    dob = models.DateField(null=True)
    username = models.CharField(max_length=50, unique=True)

    REQUIRED_FIELDS = []

Сериализатор является:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserModel
        fields = ['id','name','username','email','phone','password']
        extra_kwargs = {
            'password': {'write_only': True}
        }

    def create(self, validated_data):
        password = validated_data.pop('password', None)
        instance = self.Meta.model(**validated_data)
        if password !=None:
            instance.set_password(password)
        instance.save()
        return instance

url is:

from django.urls import path
from . views import RegisterView, UpdateUserView
urlpatterns = [
    path('register/', RegisterView.as_view()),
    path('updateUser/', UpdateUserView.as_view())
]

Теперь, как создать представление для этого, которое принимает объект как вход и обновляет его?!

Я думаю сделать это так, вам нужно переопределить метод update для обработки обновления пользователя, это будет выглядеть следующим образом

 def update(self, instance, validated_data):
     """Your code to handle it"""
     return instance

Ваше представление должно наследоваться от UpdateAPIView (Здесь вы можете проверить документацию ) и затем в вашем url-файле вы должны сделать это следующим образом

urlpatterns = [
    path('register/', RegisterView.as_view()),
    path('updateUser/', UpdateUserView.as_view())
]

Чтобы сделать это без передачи id в пути url (так как это не безопасно само по себе, поэтому вам придется написать некоторый код для разрешения), вы должны переопределить функцию get_object следующим образом:

def get_object(self):
  queryset = self.get_queryset()
  obj = get_object_or_404(queryset, user=self.request.user)
  return obj

Поступая таким образом, он становится безопасным.

Ps. """Ваш код для обработки""" - это код, который вы должны получить от пользователя и обновить его данные в зависимости от того, что вы хотите сделать.

Другой способ сделать это - создать представление на основе функций, но этот тоже работает.

Вернуться на верх