feat: create RegisterView and implement generate_initials in UserSerializer
This commit is contained in:
parent
734c9e15ec
commit
32d49f8d15
3 changed files with 32 additions and 2 deletions
|
|
@ -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]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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'),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue