Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中注册用户时密码未加密_Python_Django - Fatal编程技术网

Python 在Django中注册用户时密码未加密

Python 在Django中注册用户时密码未加密,python,django,Python,Django,序列化程序.py class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('id', 'username', 'email') class RegisterSerializer(serializers.ModelSerializer): class Meta: model = User fields

序列化程序.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email')

class RegisterSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password')
        extra_kwargs = {'password': {'write_only': True}}

        def create(self, validated_data):
            user = User(validated_data['username'], validated_data['email'])
            user.set_password(validated_data['password'])
            user.save()
            return user
views.py

class RegisterAPI(generics.GenericAPIView):
    serializer_class = RegisterSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        print("user = ",user)
        return Response({
            "user": UserSerializer(user, context=self.get_serializer_context()).data,
            "token": AuthToken.objects.create(user)[1]
            })

# Create your views here.

class LoginAPI(KnoxLoginView):
    permission_classes = (permissions.AllowAny,)

    def post(self, request, format=None):
        serializer = AuthTokenSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        login(request, user)
        return super(LoginAPI, self).post(request, format=None)

# Get User API
class UserAPI(generics.RetrieveAPIView):
    permission_classes = [permissions.IsAuthenticated,]
    serializer_class = UserSerializer

    def get_object(self):
        return self.request.user
密码未以指定格式加密,因此登录API也无法工作。它表明- “非字段错误”:[ “无法使用提供的凭据登录。” ] 另外,在django的管理面板中,它显示了更新“RegisterSerializer”类的“create”方法

别忘了导入make_密码方法

from django.contrib.auth.hashers import make_password
并且您创建的方法没有正确缩进

序列化程序.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email')

class RegisterSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User(validated_data['username'], validated_data['email'])
        user.set_password(validated_data['password'])
        user.save()
        return user

您使用的是AbstractBaseUsers吗?我想不是,从哪里可以找到这个?从哪里可以从django.contrib.auth.models import User获得这个模型用户
我使用了这个我尝试了您的解决方案,但同样的错误仍然存在:
User=User.objects.create_User(password=validated_data['password'],username=validated_data['username'],email=validated_data['email'])
返回用户
是否检查了“RegisterSerializer”类“create”方法的缩进?我认为“create”方法没有正确缩进,但在您的问题中serializer.py文件没有正确缩进。我已经更新了我的答案,你可以再次验证。非常感谢。现在密码被加密了。我认为create方法在Meta类中。
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email')

class RegisterSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User(validated_data['username'], validated_data['email'])
        user.set_password(validated_data['password'])
        user.save()
        return user