Al registrar un usuario, la contraseña de usuario deseada se compara con una lista de contraseñas no permitidas. Sin embargo, cuando la contraseña se pasa a un método de validación, se genera el siguiente error:
AttributeError: 'NoneType' object has no attribute 'lower'
¿Por qué se invoca el método de validate() tal como está si password es None cuando de hecho es verdadera?
from django.contrib.auth.models import User from django.contrib.auth.password_validation import ( validate_password, CommonPasswordValidator, NumericPasswordValidator ) from rest_framework import serializers class LoginSerializer(UsernameSerializer): password = serializers.RegexField( r"[0-9A-Za-z]+", min_length=5, max_length=8 ) def validate(self, data): username = data['username'] password = data['password'] try: validate_password(password, password_validators=[ CommonPasswordValidator, NumericPasswordValidator ]) except serializers.ValidationError: if username == password: pass raise serializers.ValidationError("Invalid password") else: return data class Meta: fields = ['username', 'password'] model = User -> for validator in password_validators: (Pdb) n > \auth\password_validation.py(46)validate_password() -> try: (Pdb) n > \auth\password_validation.py(47)validate_password() -> validator.validate(password, user) (Pdb) password 'Bingo' (Pdb) user (Pdb) password 'Bingo' (Pdb) s --Call-- > \auth\password_validation.py(180)validate() -> def validate(self, password, user=None): (Pdb) password (Pdb) n > \django\contrib\auth\password_validation.py(181)validate() -> if password.lower().strip() in self.passwords: (Pdb) n AttributeError: 'NoneType' object has no attribute 'lower'if password and ...:Esto verifica si tiene un valor y si el valor cumple con las otras condiciones