我为序列化程序编写了 mixins 并遇到了以下问题:
class UniqueLinkInspectionMixin(serializers.Serializer, ABC):
"""
Класс, отвечающий за валидацию пришедших uidb и токена в представлении,
в котором он используется.
"""
uidb = serializers.CharField()
token = serializers.CharField()
def __init__(self, *args, **kwargs):
"""
Конструктор, определяющий поле для валидации.
"""
self.token_generator = default_token_generator
super().__init__(*args, **kwargs)
@staticmethod
def get_customer(uidb):
"""
Метод, осуществляющий получение пользователя
по пришедшему uidb.
"""
try:
uid = urlsafe_base64_decode(uidb).decode()
return Customer.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, Customer.DoesNotExist):
pass
def validate(self, attrs):
"""
Валидирует пришедшие данные.
"""
uidb, token = attrs['uidb'], attrs['token']
customer = self.get_customer(uidb)
if not (
customer is not None
and self.token_generator(customer, token)
):
raise serializers.ValidationError(
'As a result of checking the link, '
'it turned out to be incorrect or inactive.'
)
class DoublePasswordMixin(serializers.Serializer, ABC):
"""
Сериализатор, от которого должны наследоваться другие сериализаторы,
ожидающие два парольных поля, которые объявлены здесь.
"""
password = PasswordField()
confirm_password = PasswordField()
def validate(self, attrs):
"""
Метод, который осуществляет проверку на соответствие
двух введенных паролей.
"""
if attrs['password'] != attrs.pop('confirm_password'):
raise serializers.ValidationError('Password mismatch.')
如您所见,它们中的每一个都有自己的 validate 方法实现。因此,假设我为密码恢复编写了一个序列化程序,并同时从这两个 mixin 继承它,一个包含验证传入唯一链接的逻辑,另一个验证密码,列表中的第一个我将继承的类将替换第二个。请帮我解决这个问题。
从所需类添加显式方法调用(类似问题)
序列化程序的示例模板: