我制作了三个不同的views.py变体,并且在所有这些变量中都成功创建了用户,但在管理面板中,我看到无效的密码格式或未知的散列算法。
views1.py
class UserCreteSerializer(ModelSerializer):
class Meta:
model=User
fields = ['email', 'phone', 'password']
extra_kwargs = {"password":
{"write_only": True}
}
def create(self, validated_data):
email = validated_data['email']
phone = validated_data['phone']
password = validated_data['password']
user_obj = User(
email = email,
phone = phone
)
user_obj.set_password(password)
user_obj.save()
return validated_data
views2.py
def create(self, validated_data):
user = User(**validated_data)
user.set_password(validated_data['password'])
user.save()
return user
views3.py
def create(self, validated_data):
return User.objects.create(**validated_data)
为什么会这样?所有这些方式都应该有效
settings.py
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
)
}
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
]
}
AUTH_USER_MODEL = 'customuser.User'
customuser.User
class User(AbstractUser):
username = None
email = models.EmailField(validators=[email_regex], unique=True)
phone = models.CharField(validators=[phone_regex], max_length=15)
is_pro = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['phone']
objects = UserManager()
答案 0 :(得分:1)
class UserCreteSerializer(ModelSerializer):
password = serializers.CharField(max_length=32, write_only=True)
class Meta:
model=User
fields = ('email', 'phone', 'password')
def create(self, validated_data):
password = validated_data.pop('password')
try:
user = User(**validated_data)
user.set_password(password)
user.save()
except Exception as e:
print (e)
raise
return user
答案 1 :(得分:0)
您应该在创建后返回user_obj
对象,而不是validated_data
,password
1}}中create
方法中包含未隐藏views1.py
字段>
def create(self, validated_data):
email = validated_data['email']
phone = validated_data['phone']
password = validated_data['password']
user_obj = User(
email = email,
phone = phone
)
user_obj.set_password(password)
user_obj.save()
return user_obj