Sab*_*lex 6 python authentication passwords django django-rest-framework
我正在尝试使用Django Rest Framework为我的用户注册创建一个API.我按照api-guide中的步骤创建了一个序列化程序
class CreateUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('email', 'username', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User(
email=validated_data['email'],
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
Run Code Online (Sandbox Code Playgroud)
但是,我继续Invalid password format or unknown hashing algorithm.
为我新创建的用户获取.我试图使用make_password
从django.contrib.auth.hashers
,但我仍然无法解决这个问题.
谢谢
Tej*_*eja 16
你可以这样试试
from django.contrib.auth.hashers import make_password
user = User.objects.create(
email=validated_data['email'],
username=validated_data['username'],
password = make_password(validated_data['password'])
)
Run Code Online (Sandbox Code Playgroud)
小智 7
在序列化器中重新定义函数 create :
from django.contrib.auth.hashers import make_password
class UserSerializer(ModelSerializer):
def create(self, validated_data):
validated_data['password'] = make_password(validated_data['password'])
return super(UserSerializer, self).create(validated_data)
Run Code Online (Sandbox Code Playgroud)
还有这一切!:D
您还可以通过向序列化程序添加方法并使其返回哈希值来为该字段使用字段验证函数。password
validate_password
from rest_framework.serializers import ModelSerializer
from django.contrib.auth.hashers import make_password
class UserSerializer(ModelSerializer):
class Meta:
model = backend.models.User
fields = ('username', 'email', 'password',)
validate_password = make_password
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以在CreateAPIView中覆盖perform_create方法
from rest_framework.generics import CreateAPIView
class SignUpView(CreateAPIView):
serializer_class = SignUpSerializers
def perform_create(self, serializer):
instance = serializer.save()
instance.set_password(instance.password)
instance.save()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5435 次 |
最近记录: |