Update Model field and add Profile Cutomize API

This commit is contained in:
sosokker 2023-11-05 03:48:10 +07:00
parent db297c06ce
commit 3d9a56f0df
5 changed files with 63 additions and 5 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 4.2.6 on 2023-11-04 19:15
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0002_customuser_refresh_token'),
]
operations = [
migrations.AddField(
model_name='customuser',
name='profile_pic',
field=models.ImageField(blank=True, default='profile_pics/default.png', null=True, upload_to='profile_pics'),
),
]

View File

@ -13,6 +13,7 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
first_name = models.CharField(max_length=150, blank=True) first_name = models.CharField(max_length=150, blank=True)
start_date = models.DateTimeField(default=timezone.now) start_date = models.DateTimeField(default=timezone.now)
about = models.TextField(_('about'), max_length=500, blank=True) about = models.TextField(_('about'), max_length=500, blank=True)
profile_pic = models.ImageField(upload_to='profile_pics', null=True, blank=True, default='profile_pics/default.png')
is_staff = models.BooleanField(default=False) is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True) is_active = models.BooleanField(default=True)

View File

@ -7,12 +7,12 @@ class CustomUserSerializer(serializers.ModelSerializer):
Serializer for CustomUser model. Serializer for CustomUser model.
""" """
email = serializers.EmailField(required=True) email = serializers.EmailField(required=True)
username = serializers.CharField(required=True) username = serializers.CharField()
password = serializers.CharField(min_length=8, write_only=True) password = serializers.CharField(min_length=8, write_only=True)
class Meta: class Meta:
model = CustomUser model = CustomUser
fields = ('email', 'password') fields = ('email', 'username', 'password')
extra_kwargs = {'password': {'write_only': True}} extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data): def create(self, validated_data):
@ -25,3 +25,12 @@ class CustomUserSerializer(serializers.ModelSerializer):
instance.set_password(password) instance.set_password(password)
instance.save() instance.save()
return instance return instance
class UpdateProfileSerializer(serializers.ModelSerializer):
"""
Serializer for updating user profile.
"""
class Meta:
model = CustomUser
fields = ('profile_pic', 'first_name', 'about')

View File

@ -1,6 +1,7 @@
from django.urls import path from django.urls import path
from users.views import CustomUserCreate from users.views import CustomUserCreate, CustomUserProfileUpdate
urlpatterns = [ urlpatterns = [
path('user/create/', CustomUserCreate.as_view(), name="create_user"), path('user/create/', CustomUserCreate.as_view(), name="create_user"),
path('user/update/', CustomUserProfileUpdate.as_view(), name='update_user')
] ]

View File

@ -1,11 +1,13 @@
"""This module defines API views for user creation""" """This module defines API views for user creation"""
from rest_framework import status from rest_framework import status
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework.parsers import MultiPartParser
from .serializers import CustomUserSerializer from users.serializers import CustomUserSerializer, UpdateProfileSerializer
class CustomUserCreate(APIView): class CustomUserCreate(APIView):
@ -25,3 +27,30 @@ class CustomUserCreate(APIView):
if user: if user:
return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class CustomUserProfileUpdate(APIView):
"""
Custom User Profile Update View.
"""
parser_classes = (MultiPartParser,)
permission_classes = (IsAuthenticated,)
def get(self, request):
user = request.user
image_url = user.profile_pic.url
username = user.username
data = {
'image_url': image_url,
'username': username
}
return Response(data)
def post(self, request):
serializer = UpdateProfileSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=400)