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 django.utils import timezone
|
||||
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):
|
||||
serializer_class = LoginSerializer
|
||||
|
|
@ -55,7 +58,25 @@ class LogoutView(APIView):
|
|||
return Response({"error": "No active session or token already expired"}, status=status.HTTP_401_UNAUTHORIZED)
|
||||
token.delete()
|
||||
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):
|
||||
authentication_classes = [authentication.TokenAuthentication]
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ from django.urls import path, include
|
|||
from rest_framework.routers import DefaultRouter
|
||||
from task_app.views import TaskViewSet, SubTaskViewSet, AssignedTaskViewSet
|
||||
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.register(r'tasks', TaskViewSet)
|
||||
|
|
@ -18,4 +18,6 @@ urlpatterns = [
|
|||
path('auth/', AuthView.as_view(), name='auth'),
|
||||
path('auth/login/', LoginView.as_view(), name='login'),
|
||||
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():
|
||||
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 Meta:
|
||||
model = User
|
||||
fields = ['id', 'first_name', 'last_name', 'email', 'phone', 'initials', 'color', 'is_online', 'is_contact_only', 'last_login']
|
||||
|
||||
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:
|
||||
validated_data['color'] = generate_random_color()
|
||||
return super().create(validated_data)
|
||||
|
|
|
|||
Loading…
Reference in a new issue