Spaces:
Sleeping
Sleeping
File size: 4,248 Bytes
113d0af |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
from email import message
from django.shortcuts import render
from rest_framework import generics, status, permissions
from rest_framework.response import Response
from authentication.models import User, UserActivationCode
from rest_framework.views import APIView
from djoser.views import UserViewSet
from authentication.serializers import LogoutSerializer,UserSerializer
from .utils.account_send_email import send_email_to_user
from .utils.generate_password import random_pass_generator
from rest_framework_simplejwt.views import TokenObtainPairView
# Create your views here.
class AccountUserViewset(UserViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
def perform_create(self, serializer):
user = serializer.save()
activation_code = random_pass_generator()
user_activation_code = UserActivationCode.objects.create(user=user, activation_code=activation_code)
user_activation_code.save()
activation_message = f"Hello dear user.\n\nYou have just created your account on lambda elearning platform and you are asked to activate your account with the following password:\n\n{activation_code}"
send_email_to_user("Account activation code", activation_message, user.email)
# super(AccountUserViewset, self).perform_create(serializer)
# user = serializer.save()
# signals.user_registered.send(
# sender=self.__class__, user=user, request=self.request
# )
# context = {"user": user}
# to = [get_user_email(user)]
# if settings.SEND_ACTIVATION_EMAIL:
# settings.EMAIL.activation(self.request, context).send(to)
# elif settings.SEND_CONFIRMATION_EMAIL:
# settings.EMAIL.confirmation(self.request, context).send(to)
class CustomUserViewset(generics.UpdateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_serializer_context(self):
context = super(CustomUserViewset, self).get_serializer_context()
context.update({"request": self.request})
return context
def patch(self, request):
data = request.data
user = request.user
print(user)
print(data)
for key, value in data.items():
if key!='password':
setattr(user,key,value)
print(request)
user.save()
data = UserSerializer(user, context=self.get_serializer_context()).data
return Response(data, status=status.HTTP_200_OK)
class UserActivationView(APIView):
def get_permissions(self):
"""method = self.request.method
if method in ('POST', 'PUT', 'PATCH'):
return [IsAdminUser()]
else:
"""
return []
def get (self, request, email, activation_code):
print(email)
print(activation_code)
user = User.objects.filter(email=email).first()
if not user:
return Response({'message': "User not found"})
user_activation = UserActivationCode.objects.filter(user=user, usable=True).first()
if not user_activation:
return Response({'message': "User activation code not found"})
if user_activation.activation_code == activation_code:
user.is_active = True
user.save()
user_activation.usable=False
user_activation.save()
activation_message = f"Hello dear user.\n\nYour account has been activated succcessfully on the Deaf Traductor application."
send_email_to_user("Account Activated", activation_message, user.email)
return Response({'message': 'Account activted successfully'})
else:
return Response({'message':'Invalid activation code'})
class LogoutAPIView(generics.GenericAPIView):
serializer_class = LogoutSerializer
permission_classes = (permissions.IsAuthenticated,)
def post(self, request):
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(status=status.HTTP_204_NO_CONTENT)
|