django rest framework - 密码哈希

时间:2015-06-03 18:44:00

标签: authentication hash django-rest-framework basic-authentication password-hash

它让我发疯了......我在创建用户时阅读了大量有关如何哈希密码的帖子,但出于某种原因,我们无法正常工作,我无法进行身份验证。

我正在使用 django 1.8.1 django-rest-framework 3.1.2

我的代码:

views.py:

class UserViewSet(mixins.CreateModelMixin,
               mixins.RetrieveModelMixin,
               mixins.ListModelMixin,
               viewsets.GenericViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = (IsAuthenticated, )

----编辑----

使用此代码,密码将在数据库中显示,并且不会进行哈希处理,因此我无法进行身份验证。

serializers.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

还有 - serializer.save()调用什么方法?

任何想法???任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

序列化程序没有post_save方法,甚至在v3之前也没有。您必须与通用视图中的post_save混淆。通用视图的pre_savepost_save挂钩不再存在,但已替换为perform_createperform_update

您只需在用户序列化程序的obj.set_password方法中执行create即可。文档中有一个example,可以完全满足您的需求。