Files
links/backend/users/views.py
Andrey K. Choi e82f0f8e6f
Some checks failed
continuous-integration/drone/push Build is failing
Fix hardcoded localhost:8000 URLs
- Add backend/utils.py for URL management
- Update serializers to use normalize_file_url()
- Update views to use URL utils from env vars
- Fix frontend components to use NEXT_PUBLIC_API_URL
- Add new env vars: DJANGO_BACKEND_URL, DJANGO_MEDIA_BASE_URL
- Replace all hardcoded localhost:8000 with configurable URLs
2025-11-08 19:25:35 +09:00

63 lines
2.2 KiB
Python

from rest_framework import status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework import serializers
from django.contrib.auth import get_user_model
from backend.utils import normalize_file_url
User = get_user_model()
class UserProfileSerializer(serializers.ModelSerializer):
"""Сериализатор для профиля пользователя"""
avatar_url = serializers.SerializerMethodField()
cover_url = serializers.SerializerMethodField()
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name',
'full_name', 'bio', 'avatar', 'cover', 'avatar_url', 'cover_url']
read_only_fields = ['id', 'username']
def get_avatar_url(self, obj):
if obj.avatar:
request = self.context.get('request')
if request:
absolute_uri = request.build_absolute_uri(obj.avatar.url)
return normalize_file_url(absolute_uri)
return None
def get_cover_url(self, obj):
if obj.cover:
request = self.context.get('request')
if request:
absolute_uri = request.build_absolute_uri(obj.cover.url)
return normalize_file_url(absolute_uri)
return None
@api_view(['GET', 'PUT', 'PATCH'])
@permission_classes([IsAuthenticated])
def user_profile(request):
"""
Получение и обновление профиля пользователя
"""
user = request.user
if request.method == 'GET':
serializer = UserProfileSerializer(user, context={'request': request})
return Response(serializer.data)
elif request.method in ['PUT', 'PATCH']:
partial = request.method == 'PATCH'
serializer = UserProfileSerializer(
user,
data=request.data,
partial=partial,
context={'request': request}
)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)