【发布时间】:2015-08-22 04:19:15
【问题描述】:
我正在尝试使用密码哈希实现用户注册。
问题是密码保存为原始密码(输入时)。
由于某种原因,我认为序列化程序中的create方法没有被调用。
我是否将方法注释掉并不重要,并尝试注册,相同的结果 - 将用户保存到数据库而不散列密码。意思是代码没有执行?
Views.py
class UserViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = (IsCreationOrIsAuthenticated,)
Serizliers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'password', )
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User(
first_name=validated_data['first_name'],
username=validated_data['username'],
last_name=validated_data['last_name']
)
user.set_password(validated_data['password'])
user.save()
return user
我已经为此苦苦挣扎了一段时间 - 无法获得密码。
有什么想法吗?
【问题讨论】:
-
您的
create方法被标记到它位于Meta类而不是序列化程序类中的位置。您需要取消它一次,以便它在正确的行上。 -
请检查
create()方法的缩进 -
哇,多么愚蠢的错误.. 非常感谢!现在它的工作。
标签: serialization hash passwords django-rest-framework password-hash