74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
from django.contrib.auth.models import User
|
|
from django.http import JsonResponse
|
|
from knox.auth import TokenAuthentication
|
|
from rest_framework import viewsets, permissions, status
|
|
from rest_framework.decorators import api_view, action
|
|
from rest_framework.response import Response
|
|
|
|
from users.models import UserProfile
|
|
from users.permissions import ReadOnly
|
|
from users.serializers import UserSerializer, UserProfileSerializer
|
|
|
|
|
|
class UserViewSet(viewsets.ModelViewSet):
|
|
authentication_classes = [TokenAuthentication]
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
queryset = User.objects.all().order_by("-date_joined")
|
|
serializer_class = UserSerializer
|
|
|
|
|
|
class UserProfileViewSet(viewsets.ModelViewSet):
|
|
authentication_classes = [TokenAuthentication]
|
|
permission_classes = [permissions.IsAuthenticated | ReadOnly]
|
|
|
|
queryset = UserProfile.objects.all()
|
|
serializer_class = UserProfileSerializer
|
|
lookup_field = "user__username"
|
|
|
|
def retrieve(self, request, pk=None, *args, **kwargs):
|
|
try:
|
|
username = kwargs.get('user__username')
|
|
user = User.objects.get(username=username)
|
|
except User.DoesNotExist:
|
|
return Response([], status=status.HTTP_404_NOT_FOUND)
|
|
|
|
try:
|
|
user_profile = UserProfile.objects.get(user=user)
|
|
except UserProfile.DoesNotExist:
|
|
user_profile = UserProfile(
|
|
user=user,
|
|
)
|
|
|
|
user_profile.save()
|
|
|
|
return JsonResponse(UserProfileSerializer(user_profile).data)
|
|
|
|
@action(detail=False)
|
|
def current_user_profile(self, request, *args, **kwargs):
|
|
try:
|
|
user = request.user
|
|
except User.DoesNotExist:
|
|
return Response([], status=status.HTTP_404_NOT_FOUND)
|
|
|
|
try:
|
|
user_profile = UserProfile.objects.get(user=user)
|
|
except UserProfile.DoesNotExist:
|
|
user_profile = UserProfile(
|
|
user=user,
|
|
)
|
|
|
|
user_profile.save()
|
|
|
|
return JsonResponse(UserProfileSerializer(user_profile).data)
|
|
|
|
|
|
@api_view(["POST"])
|
|
def register(request):
|
|
user_data = UserSerializer(data=request.data)
|
|
|
|
if user_data.is_valid():
|
|
User.objects.create_user(**user_data.validated_data)
|
|
return Response(request.data, status=status.HTTP_201_CREATED)
|
|
else:
|
|
return Response([], status=status.HTTP_400_BAD_REQUEST)
|