feat: create RegisterView and implement generate_initials in UserSerializer

This commit is contained in:
Chneemann 2025-04-05 20:34:26 +02:00
parent 734c9e15ec
commit 32d49f8d15
3 changed files with 32 additions and 2 deletions

View file

@ -7,7 +7,10 @@ from .serializer import LoginSerializer
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from django.utils import timezone from django.utils import timezone
from .models import ExpiringToken, ExpiringTokenAuthentication from .models import ExpiringToken, ExpiringTokenAuthentication
from django.contrib.auth import get_user_model
from user_app.serializers import UserSerializer
User = get_user_model()
class LoginView(APIView): class LoginView(APIView):
serializer_class = LoginSerializer serializer_class = LoginSerializer
@ -56,6 +59,24 @@ class LogoutView(APIView):
token.delete() token.delete()
return Response({"message": "Successfully logged out"}, status=status.HTTP_200_OK) return Response({"message": "Successfully logged out"}, status=status.HTTP_200_OK)
class RegisterView(APIView):
def post(self, request):
email = request.data.get('email')
password = request.data.get('password')
if User.objects.filter(email=email).exists():
return Response({'error': 'Email already exists'}, status=status.HTTP_409_CONFLICT)
serialized = UserSerializer(data=request.data)
if serialized.is_valid():
user = serialized.save()
user.set_password(password)
user.is_active = True
user.save()
return Response({'message': 'User created.'}, status=status.HTTP_201_CREATED)
return Response(serialized.errors, status=status.HTTP_400_BAD_REQUEST)
class AuthView(APIView): class AuthView(APIView):
authentication_classes = [authentication.TokenAuthentication] authentication_classes = [authentication.TokenAuthentication]

View file

@ -3,7 +3,7 @@ from django.urls import path, include
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from task_app.views import TaskViewSet, SubTaskViewSet, AssignedTaskViewSet from task_app.views import TaskViewSet, SubTaskViewSet, AssignedTaskViewSet
from user_app.views import UserViewSet from user_app.views import UserViewSet
from auth_app.views import LoginView, LogoutView, AuthView from auth_app.views import LoginView, LogoutView, AuthView, RegisterView
router = DefaultRouter() router = DefaultRouter()
router.register(r'tasks', TaskViewSet) router.register(r'tasks', TaskViewSet)
@ -18,4 +18,6 @@ urlpatterns = [
path('auth/', AuthView.as_view(), name='auth'), path('auth/', AuthView.as_view(), name='auth'),
path('auth/login/', LoginView.as_view(), name='login'), path('auth/login/', LoginView.as_view(), name='login'),
path('auth/logout/', LogoutView.as_view(), name='logout'), path('auth/logout/', LogoutView.as_view(), name='logout'),
path('auth/register/', RegisterView.as_view(), name='register'),
] ]

View file

@ -7,12 +7,19 @@ from djangorestframework_camel_case.render import CamelCaseJSONRenderer
def generate_random_color(): def generate_random_color():
return "#" + "".join(random.choices("0123456789ABCDEF", k=6)) return "#" + "".join(random.choices("0123456789ABCDEF", k=6))
def generate_initials(first_name, last_name):
return f"{first_name[0].upper()}{last_name[0].upper()}"
class UserSerializer(serializers.ModelSerializer): class UserSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = User model = User
fields = ['id', 'first_name', 'last_name', 'email', 'phone', 'initials', 'color', 'is_online', 'is_contact_only', 'last_login'] fields = ['id', 'first_name', 'last_name', 'email', 'phone', 'initials', 'color', 'is_online', 'is_contact_only', 'last_login']
def create(self, validated_data): def create(self, validated_data):
first_name = validated_data.get('first_name', '')
last_name = validated_data.get('last_name', '')
validated_data['initials'] = generate_initials(first_name, last_name)
if 'color' not in validated_data: if 'color' not in validated_data:
validated_data['color'] = generate_random_color() validated_data['color'] = generate_random_color()
return super().create(validated_data) return super().create(validated_data)