Django Rest Framework - 为Serializer提供模仿默认验证的默认用户模型验证

问题描述 投票:0回答:1

我目前正在制作一个REST API,人们可以通过它注册自己。我正准备编写验证密码的长度/复杂程度等等。当我发现时,可能有一种方法来模仿模型已经设置的默认约束?在那儿?

我的serializer.py代码如下所示:

from rest_framework import serializers
from django.contrib.auth import get_user_model
from rest_framework.reverse import reverse

User = get_user_model()

class UserSerializer(serializers.ModelSerializer):
    links = serializers.SerializerMethodField()

    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name', 'email', 'password', 'groups', 'user_permissions', 'is_staff', 'is_active', 'is_superuser', 'last_login', 'date_joined', 'links')

    def get_links(self, obj):
        request = self.context['request']
        username = obj.get_username()
        return{
            'self': reverse('user-detail', kwargs={User.USERNAME_FIELD: username}, request=request)
        }

    def validate(self, attrs):
        #...

谢谢

python django rest validation frameworks
1个回答
1
投票

您可以使用AUTH_PASSWORD_VALIDATORS设置启用Django密码验证。但

验证程序不在模型级别应用,例如在User.objects.create_user()和create_superuser()中。

因此,您需要向序列化程序添加验证:

from django.contrib.auth.password_validation import validate_password

def validate_password(self, value):
    user = self.context['request'].user
    validate_password(password=value, user=user)
© www.soinside.com 2019 - 2024. All rights reserved.