它让我发疯了......我在创建用户时阅读了大量有关如何哈希密码的帖子,但出于某种原因,我们无法正常工作,我无法进行身份验证。
我正在使用 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()
调用什么方法?
任何想法???任何帮助将不胜感激!
答案 0 :(得分:1)
序列化程序没有post_save
方法,甚至在v3之前也没有。您必须与通用视图中的post_save
混淆。通用视图的pre_save
和post_save
挂钩不再存在,但已替换为perform_create
和perform_update
。
您只需在用户序列化程序的obj.set_password
方法中执行create
即可。文档中有一个example,可以完全满足您的需求。