Django Rest Login Endpoint

0

Witam utworzylem takiego endpointa do logowania czy ktos mogl by go ocenic i doradzic mi czy mozna cos tutaj poprawic?

class UserLoginView(APIView):
    
    def post(self, request):
        serializer = UserLoginSerializer(data=request.data)
        if serializer.is_valid():
            user = authenticate(username=serializer.data['username'], password=serializer.data['password'])
            if user and user.is_active:
                login(request, user)
                try:
                    token = Token.objects.get(user=user)
                    token.delete()
                    Token.objects.create(user=user)
                except Token.DoesNotExist:
                    Token.objects.create(user=user)
                request.session['user'] = str(user)
                print request.session['user']
                return Response({"success": True}, status=200)
        return Response({"success": False}, status=400)
0

Czemu próbujesz sam napisać widok do logowania w Django?
Masz do dyspozycji django-registration:
https://django-registration.readthedocs.io/en/2.3/

Który możesz podpiąć i wystarczy, że odpowiednie templatki dodasz.
Korzystając z DjangoRestFramework, też istnieje cały mechanizm do logowania i lepiej jest skorzystać z gotowych i przetestowanych modułów niż samemu pisać.
http://www.django-rest-framework.org/api-guide/authentication/

0

A czy ten wbudowany login endpoint rowniez robi update tokena?

0

Moim zdaniem logowanie jest okej ,po co używać dodatkowej bliblioteki ? Jeśli chcesz używać tokena to powinno Ci pomóc dla jwt tokena:

http://getblimp.github.io/django-rest-framework-jwt/

0

A czy mogl by ktos ocenic caly kod? Bardzo prosze ;)

class UserRegisterView(APIView):

    def post(self, request):
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({"success": True},status=200)
        return Response({"success": False}, status=400)

class UserLoginView(APIView):

    def post(self, request):
        serializer = UserLoginSerializer(data=request.data)
        if serializer.is_valid():
            user = authenticate(username=serializer.data['username'], password=serializer.data['password'])
            if user and user.is_active:
                login(request, user)
                try:
                    token = Token.objects.get(user=user)
                    token.delete()
                    Token.objects.create(user=user)
                except Token.DoesNotExist:
                    Token.objects.create(user=user)
                request.session['user'] = str(user)
                print request.session['user']
                return Response({"success": True}, status=200)
        return Response({"success": False}, status=400)

class UserLogoutView(APIView):

    def post(self, request):
        print request.session['user']
        if request.session['user']:
            user = User.objects.get(username=request.session['user'])
            user.auth_token.delete()
            logout(request)
            return Response({"success": True }, status=200)
        return Response({"success": False}, status=400)

class UserAccountActivationView(APIView):
    def get(self, request, token):
        active_token = Token.objects.get(key=token)
        if active_token:
            active_token.user.is_active = True
            active_token.user.save()
            return Response({"success": True}, status=200)
        return Response({"success": False}, status=400)

0
try:
                    token = Token.objects.get(user=user)
                    token.delete()
                    Token.objects.create(user=user)
                except Token.DoesNotExist:
                    Token.objects.create(user=user)

To można zapisać w ten sposób ale nie wiem czy słusznie. Ewentualnie użyć finally

try:
                    token = Token.objects.get(user=user)
                    token.delete()
                except Token.DoesNotExist:
                    pass
                Token.objects.create(user=user)

1 użytkowników online, w tym zalogowanych: 0, gości: 1