Python 我可以用';设置密码';在我的模型中没有AbstractUser的DRF中的方法?
我是DRF(和编程)的新手,我有一个大问题 我有这个模型:Python 我可以用';设置密码';在我的模型中没有AbstractUser的DRF中的方法?,python,oop,django-rest-framework,Python,Oop,Django Rest Framework,我是DRF(和编程)的新手,我有一个大问题 我有这个模型: class Player (models.Model): user_id = models.UUIDField (primary_key=True, default=uuid.uuid4, editable=False, blank=True) username = models.CharField (max_length=30, unique=True, null=False)
class Player (models.Model):
user_id = models.UUIDField (primary_key=True, default=uuid.uuid4, editable=False, blank=True)
username = models.CharField (max_length=30, unique=True, null=False)
email = models.EmailField (max_length=50, unique=True, null=False)
password = models.CharField (max_length=100, null=True)
is_validated = models.BooleanField (default=False)
created = models.DateField (auto_now_add=True)
updated = models.DateField (auto_now=True)
class Meta:
verbose_name = 'player'
verbose_name_plural = 'players'
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = [
'username'
]
def __str__ (self):
return self.username
这个序列化程序:
class PlayerSerializer(serializers.ModelSerializer):
class Meta:
model = Player
fields = ('username', 'email', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = Player(
email = validated_data["email"],
username = validated_data["username"]
)
user.set_password(validated_data["password"])
user.save()
return user
def validate_password (self, value):
if len (value) < 8 or len (value) > 30:
raise serializers.ValidationError('Password length must be between 8 and 30.')
return value
class PlayerSerializer(serializers.ModelSerializer):
类元:
模型=玩家
字段=(‘用户名’、‘电子邮件’、‘密码’)
extra_kwargs={'password':{'write_only':True}
def创建(自我验证的_数据):
用户=玩家(
电子邮件=已验证的_数据[“电子邮件”],
用户名=已验证的_数据[“用户名”]
)
用户。设置密码(已验证的密码数据[“密码”])
user.save()
返回用户
def验证_密码(自身,值):
如果len(值)<8或len(值)>30:
引发序列化程序。ValidationError('密码长度必须介于8和30之间')
返回值
当我创建一个新玩家时,总是会遇到同样的问题:
“玩家”对象没有“设置密码”属性
如果不导入AbstractUser,我如何使用“设置密码”
我尝试过用OnetoOnelink扩展用户模型,但没有成功。你好,我认为这里的问题是
Player
模型没有一个定义好的方法叫做set\u password,不像default djangoUser
模型和AbstractUser
内置了该方法
您必须定义一个自定义的set\u passowrd
方法好的,多亏了,我可以保存密码,但它不会保存哈希值
我尝试了来自django.contrib.auths.hasher的make_password
,但它不起作用,因为我的序列化程序
创建方法
可能会发生什么事?我认为您应该在这里编写一个python函数,将玩家的密码保存在models.py
文件中,然后不调用set\u password
您可以调用您创建的函数。def set\u password(self,password):self.password=密码返回密码类似的内容?