[英]Invalid password format or unknown hashing algorithm in Django class based view
I want to create user by API view.我想通过 API 视图创建用户。 But I get this problem:但我遇到了这个问题:
serializers.py序列化程序.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
views.py视图.py
class UserRegistration(CreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
How can I solve this problem?我怎么解决这个问题?
You should override serializer's create()
method to hash password before saving new user object.在保存新用户对象之前,您应该覆盖序列化程序的create()
方法来散列密码。 You can use set_password
for this:您可以为此使用set_password
:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
Otherwise User.password will be stared in DB without hashing which is not secure.否则 User.password 将在没有散列的情况下盯着数据库,这是不安全的。
Also you can use create_user
method which is calling set_password
by defaut:您也可以使用create_user
方法,该方法默认调用set_password
:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
def create(self, validated_data):
return User.objects.create_user(**validated_data)
try this尝试这个
from django.contrib.auth.hashers import make_password
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username']
)
user.set_password(make_password(validated_data['password']))
user.save()
return user
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.