090500
This commit is contained in:
161
config/accounts/views.py
Normal file
161
config/accounts/views.py
Normal file
@@ -0,0 +1,161 @@
|
||||
from rest_framework.decorators import api_view, action
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status, views, viewsets
|
||||
from django.contrib.auth import authenticate
|
||||
from rest_framework_simplejwt.tokens import RefreshToken
|
||||
from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
from rest_framework.permissions import AllowAny
|
||||
from django.shortcuts import redirect
|
||||
from django.contrib.auth import logout
|
||||
from django.http import JsonResponse
|
||||
|
||||
from config.accounts.models import User
|
||||
from config.accounts.serializers import UserSerializer, ProfileSerializer
|
||||
|
||||
|
||||
@api_view(['POST', ])
|
||||
def account_registration(request):
|
||||
try:
|
||||
user_data = request.data.get('user')
|
||||
|
||||
serializer = UserSerializer(data=user_data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return Response({"user": serializer.data}, status=status.HTTP_201_CREATED)
|
||||
|
||||
except Exception:
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
@api_view(['POST', ])
|
||||
@permission_classes([AllowAny]) # Разрешение для всех источников
|
||||
@csrf_exempt
|
||||
def account_login(request):
|
||||
try:
|
||||
user_data = request.data.get('user')
|
||||
user = authenticate(email=user_data['email'], password=user_data['password'])
|
||||
serializer = UserSerializer(user)
|
||||
jwt_token = RefreshToken.for_user(user)
|
||||
serializer_data = serializer.data
|
||||
serializer_data['token'] = str(jwt_token.access_token)
|
||||
response_data = {
|
||||
"user": serializer_data,
|
||||
}
|
||||
return Response(response_data, status=status.HTTP_202_ACCEPTED)
|
||||
|
||||
# except Exception:
|
||||
# return Response(status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# Добавляем заголовок Access-Control-Allow-Origin
|
||||
# ТЕСТ
|
||||
# response = JsonResponse({"message": "Success!"})
|
||||
# response["Access-Control-Allow-Origin"] = "http://localhost:3000" # Разрешаем только локальный хост
|
||||
# return response
|
||||
|
||||
except Exception:
|
||||
# return JsonResponse({"message": "Error!"}, status=400)
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class UserView(views.APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, format=None):
|
||||
user = self.request.user
|
||||
serializer = UserSerializer(user)
|
||||
# Создание JWT-токена для пользователя
|
||||
token = RefreshToken.for_user(user)
|
||||
# Добавление ответа
|
||||
response_data = {
|
||||
"user": serializer.data,
|
||||
"token": {
|
||||
"access_token": str(token.access_token),
|
||||
"refresh_token": str(token),
|
||||
}
|
||||
}
|
||||
return Response(response_data, status=status.HTTP_200_OK)
|
||||
|
||||
def put(self, request, format=None, pk=None):
|
||||
user = self.request.user
|
||||
user_data = request.data.get('user')
|
||||
|
||||
user.email = user_data['email']
|
||||
user.bio = user_data['bio']
|
||||
user.image = user_data['image']
|
||||
user.save()
|
||||
|
||||
serializer = UserSerializer(user)
|
||||
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class ProfileDetailView(viewsets.ModelViewSet):
|
||||
queryset = User.objects.all()
|
||||
serializer_class = ProfileSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
lookup_field = 'username'
|
||||
http_method_names = ['get', 'post', 'delete']
|
||||
|
||||
def get_permissions(self):
|
||||
if self.action == 'list':
|
||||
return [IsAuthenticatedOrReadOnly(), ]
|
||||
return super().get_permissions()
|
||||
|
||||
def list(self, request, username=None, *args, **kwargs):
|
||||
try:
|
||||
profile = User.objects.get(username=username)
|
||||
serializer = self.get_serializer(profile)
|
||||
return Response({"profile": serializer.data})
|
||||
|
||||
except Exception:
|
||||
return Response({"errors": {
|
||||
"body": [
|
||||
"Invalid User"
|
||||
]
|
||||
}})
|
||||
|
||||
@action(detail=True, methods=['post', 'delete'])
|
||||
def follow(self, request, username=None, *args, **kwargs):
|
||||
if request.method == 'POST':
|
||||
|
||||
profile = self.get_object()
|
||||
follower = request.user
|
||||
if profile == follower:
|
||||
return Response({"errors": {
|
||||
"body": [
|
||||
"Invalid follow Request"
|
||||
]
|
||||
}}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
profile.followers.add(follower)
|
||||
serializer = self.get_serializer(profile)
|
||||
return Response({"profile": serializer.data})
|
||||
|
||||
elif request.method == 'DELETE':
|
||||
|
||||
profile = self.get_object()
|
||||
follower = request.user
|
||||
if profile == follower:
|
||||
return Response({"errors": {
|
||||
"body": [
|
||||
"Invalid follow Request"
|
||||
]
|
||||
}}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if not profile.followers.filter(pk=follower.id).exists():
|
||||
return Response({"errors": {
|
||||
"body": [
|
||||
"Invalid follow Request"
|
||||
]
|
||||
}}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
profile.followers.remove(follower)
|
||||
serializer = self.get_serializer(profile)
|
||||
return Response({"profile": serializer.data})
|
||||
|
||||
|
||||
def signout(request):
|
||||
logout(request)
|
||||
return redirect("main")
|
||||
Reference in New Issue
Block a user