【发布时间】:2018-12-10 13:27:51
【问题描述】:
自定义用户模型:
class User(AbstractUser):
ROLE_CHOICES = (
('R', 'rider'),
('D', 'driver'),
)
role = models.CharField(max_length=1, choices=ROLE_CHOICES)
phone_number = models.CharField(max_length=10)
cab = models.OneToOneField('Cab', on_delete=models.CASCADE, blank=True, null=True)
Rider 序列化器:
class RiderSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'phone_number', 'password')
extra_kwargs = {
'password': {'write_only': True}
}
def create(self, validated_data):
username = validated_data.pop('username')
password = validated_data.pop('password')
instance = User(username, **validated_data)
if password is not None:
instance.set_password(password)
instance.save()
return instance
基于 Rider 函数的视图方法:
@api_view(['GET', 'POST'])
def rider_list(request):
if request.method == 'GET':
riders = User.objects.filter(role='R')
serializer = RiderSerializer(riders, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = RiderSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
serializer.save(role='R')
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
骑手端点:/riders/
我能够创建一个用户对象,但用户身份验证失败,因为密码以纯文本形式存储在对象中。
我尝试使用 User.objects.create_user(username, password=password, **validated_data) 将密码设置为哈希值,但它不起作用
我也尝试过使用 make_password 方法设置散列密码,但似乎没有任何效果。
请告诉我我错过了什么。如何将散列密码存储在自定义用户对象的密码字段中。
【问题讨论】:
标签: django django-rest-framework