Files
2025-10-22 20:14:31 +08:00

61 lines
1.9 KiB
Python

"""
Authentication views.
"""
from django.contrib.auth import authenticate, login, logout, get_user_model
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .serializers import UserRegistrationSerializer, UserSerializer, LoginSerializer
User = get_user_model()
@api_view(['POST'])
def register(request):
"""Register a new user."""
serializer = UserRegistrationSerializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
return Response({
'message': 'User created successfully',
'user': UserSerializer(user).data
}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@api_view(['POST'])
def user_login(request):
"""Login user."""
serializer = LoginSerializer(data=request.data)
if not serializer.is_valid():
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
username = serializer.validated_data['username']
password = serializer.validated_data['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return Response({
'message': 'Login successful',
'user': UserSerializer(user).data
})
return Response({'error': 'Invalid credentials'}, status=status.HTTP_401_UNAUTHORIZED)
@api_view(['POST'])
def user_logout(request):
"""Logout user."""
logout(request)
return Response({'message': 'Logout successful'})
@api_view(['GET'])
def current_user(request):
"""Get current logged-in user."""
if request.user.is_authenticated:
return Response(UserSerializer(request.user).data)
return Response({'error': 'Not authenticated'}, status=status.HTTP_401_UNAUTHORIZED)