Как установить пароль в APIView - Django - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу установить пароль пользователя, для которого я сохраняю данные.Строка комментария, которую я пытался установить, но это не настройка и ошибка set_password is not defined.Как я могу установить пароль, экземпляр которого я сохраняю в APIView.

from rest_framework.views import APIView
from rest_framework import status
class EmployeeAddAPIView(APIView):

    def post(self, request, *args, **kwrgs):

        serializer1 = EmployeeRegisterSerializer(data=request.data)
        serializer2 = EmployeeProfileSerializer(data=request.data)

        user_role = ACLRoles.objects.get(id=4)

        if serializer1.is_valid():

            print(serializer1.validated_data['email'])
            # password = set_password(random_password)
            user = serializer1.save(
                username = serializer1.validated_data['email'],
                # password = password
            )

            if serializer2.is_valid():
                serializer2.save(
                    user_id = user.id,
                    user_company_id = self.request.auth.application.company.id,
                    user_role_id = user_role.id
                )

            print(serializer2.errors)

            return Response(serializer1.errors, serializer2.errors)

        return Response(serializer1.errors, serializer2.errors)

Ранее в своем приложении я устанавливал пароль примерно так:

new_user = ur_form.save(commit=False)            
new_user.username = new_user.email
new_user.set_password(random_password)
new_user.save()

1 Ответ

0 голосов
/ 19 февраля 2019

Один из возможных способов вызвать make_password ссылку из django.contrib.auth.hashers и назначить там свое значение.Это будет похоже на следующее

from django.contrib.auth.hashers import make_password

def post(self, request, *args, **kwrgs):

        serializer1 = EmployeeRegisterSerializer(data=request.data)
        serializer2 = EmployeeProfileSerializer(data=request.data)

        user_role = ACLRoles.objects.get(id=4)

        if serializer1.is_valid():

            print(serializer1.validated_data['email'])
            # password = set_password(random_password)
            user = serializer1.save(
                username = serializer1.validated_data['email'],
            )

            random_password = User.objects.make_random_password()
            obj = get_object_or_404(User, pk=user.id)
            obj.set_password(random_password)
            obj.save()

            if serializer2.is_valid():
                serializer2.save(
                    user_id = user.id,
                    user_company_id = self.request.auth.application.company.id,
                    user_role_id = user_role.id
                )

            print(serializer2.errors)

            return Response(serializer1.errors, serializer2.errors)

        return Response(serializer1.errors, serializer2.errors)
...