【发布时间】:2020-05-21 01:03:24
【问题描述】:
我试图创建一个自定义用户模型并创建一个 rest-api,但是当我发送发布请求时,它会创建一个用户模型,但密码没有经过哈希处理我在 user_create 方法中使用设置密码,它适用于基于命令行的超级用户,但是当我使用由 api 创建的其他用户时,我没有使用设置密码方法,但它也不起作用 这是我的用户模型
class UserProfile(AbstractBaseUser, PermissionsMixin):
"""custom user model"""
email = models.EmailField(max_length=250, unique=True)
name = models.CharField(max_length=250)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
# django required and django user field declaration
USERNAME_FIELD = 'email'
objects = UserProfileManager()
REQUIRED_FIELDS = ['name']
def __str__(self):
return self.email
def get_full_name(self):
return self.email
def get_short_name(self):
return self.email
我的个人资料管理员
class UserProfileManager(BaseUserManager):
"""User manager for our custom user model"""
def create_user(self, name, email, password=None):
if not email:
raise ValueError('User Must have an email')
email = self.normalize_email(email)
user = self.model(name=name, email=email)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, name, email, password=None):
user = self.create_user(
name=name,
email=email,
password=password)
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
我的序列化器
class UserProfileSerializer(serializers.ModelSerializer):
"""Serializes our custom django user model UwU (nice serializer desu ka)"""
class Meta:
model = models.UserProfile
fields = ('id','name','email','password')
extra_kwargs = {
'password':{
'write_only':True,
'style':{
'input_type':'password'
}
}
}
def create(self, validated_data):
""" Create and return a new user"""
user = models.UserProfile.objects.create_user(
email=validated_data['email'],
name=validated_data['name']
)
user.set_password(validated_data['password'])
user.save()
return user
我的观点集
class ProfileViewSet(ModelViewSet):
"""View set for user profile"""
serializer_class = serializer.UserProfileSerializer
queryset = models.UserProfile.objects.all()
authentication_classes = (TokenAuthentication,)
我是 django rest-framework 的新手,所以请帮助我
【问题讨论】:
-
使用 set_password() 保存密码(在 create() 中),否则它会将密码保存为简单文本。这就是错误。
-
检查您是否在设置中声明了
AUTH_USER_MODEL = 'yourapp.UserProfile' -
@JacekBBudzynski 我做到了
标签: django django-models django-rest-framework django-templates django-views