Я хочу принудительно изменить пароль при первом входе в систему Django Отдых - PullRequest
0 голосов
/ 04 марта 2020

У меня есть пользовательская модель пользователя с полем is_resetpwd в качестве логического поля со значением по умолчанию True. Я хочу изменить это значение на False при смене пароля, мое представление смены пароля приведено ниже

class ChangePasswordView (APIView) :

    """
    An endpoint for changing password.
    """
    serializer_class = ChangePasswordSerializer
    model = User
    permission_classes = (IsAuthenticated,)

    def get_object(self, queryset=None):
        obj = self.request.user
        # print("obj", obj)
        return obj

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()

        serializer = self.serializer_class(data=request.data)

        if serializer.is_valid():
            # Check old password

            if not self.object.check_password(serializer.data.get("old_password")):
                return Response({"old_password": ["Wrong password."]}, status=status.HTTP_400_BAD_REQUEST)
            # set_password also hashes the password that the user will get
            self.object.set_password(serializer.data.get("new_password"))
            self.object.save()


            response = {
                'message': 'Password updated successfully',
            }

            return Response(response)


        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

что мне добавить, чтобы изменить мое логическое значение

1 Ответ

1 голос
/ 04 марта 2020

Непосредственно перед сохранением () добавьте

self.object.is_resetpwd = False

, а затем сохраните объекты, как и раньше

Обновленный код будет выглядеть следующим образом

"""
An endpoint for changing passwords.
"""
serializer_class = ChangePasswordSerializer
model = User
permission_classes = (IsAuthenticated,)

def get_object(self, queryset=None):
    obj = self.request.user
    # print("obj", obj)
    return obj

def post(self, request, *args, **kwargs):
    self.object = self.get_object()

    serializer = self.serializer_class(data=request.data)

    if serializer.is_valid():
        # Check old password

        if not self.object.check_password(serializer.data.get("old_password")):
            return Response({"old_password": ["Wrong password."]}, status=status.HTTP_400_BAD_REQUEST)
        # set_password also hashes the password that the user will get
        self.object.set_password(serializer.data.get("new_password"))
        self.object.is_resetpwd = False
        self.object.save()


        response = {
            'message': 'Password updated successfully',
        }

        return Response(response)


    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
...