Добавление функционала редактирования профилей пользователей в Django REST framework (DRF) можно реализовать следующим образом:
1. Необходимо создать сериализатор для модели пользователя (User) и профиля пользователя (Profile), если профиль вынесен в отдельную модель. Ниже приведен пример кода для сериализаторов:
# serializers.py from rest_framework import serializers from django.contrib.auth.models import User from .models import Profile class ProfileSerializer(serializers.ModelSerializer): class Meta: model = Profile fields = '__all__' class UserSerializer(serializers.ModelSerializer): profile = ProfileSerializer() class Meta: model = User fields = ['id', 'username', 'email', 'profile'] def update(self, instance, validated_data): profile_data = validated_data.pop('profile') profile = instance.profile instance.email = validated_data.get('email', instance.email) instance.save() profile.bio = profile_data.get('bio', profile.bio) profile.save() return instance
2. Далее необходимо создать представление (view) для обновления профиля пользователя. Ниже приведен пример кода для представления:
# views.py from rest_framework.generics import UpdateAPIView from rest_framework.permissions import IsAuthenticated from django.contrib.auth.models import User from .serializers import UserSerializer class ProfileUpdateView(UpdateAPIView): serializer_class = UserSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return User.objects.filter(id=self.request.user.id)
3. Настройте маршруты в файле urls.py:
# urls.py from django.urls import path from .views import ProfileUpdateView urlpatterns = [ path('profile/', ProfileUpdateView.as_view(), name='profile-update'), ]
4. Теперь при отправке PATCH или PUT запроса на URL /profile/
с данными вида:
{ "username": "new_username", "email": "[email protected]", "profile": { "bio": "New bio information" } }
профиль пользователя будет обновлен в соответствии с переданными данными.
Это только базовый пример. Можно добавить дополнительную логику в представление или сериализатор для обработки различных случаев или валидации данных.