我正在尝试以更有效的方式验证我的字段,我认为我走在正确的轨道上,但是我的for循环有问题,代码如下
首先我通过字典来管理所有字段
listaCondicion = {
"nombre" : {"min":3},
"apellido" : {"min":4},
"cedula" : {"min":7, "query":consulta.verficarCedula, "param":[f"{tipoCedula.value}-{cedula.value}",], "msj":"Esta cedula ya esta ligada a un usuario"},
"numTelefono" : {"min":7, "query":consulta.verficarNumero, "param":[f"{codigoTelefono.value}-{numTelefono.value}",], "msj":"Este numero de telefono ya esta asignado a un usuario"},
"correo" : {"min":3, "query":consulta.verificarCorreo, "param":[f"{correo.value}{tipoCorreo.value}",], "msj":"Este correo ya esta en uso"},
"ubicacion" : {"min":3, "query":consulta.verficarUbicacion, "param":[ubicacion.value,], "msj":"Esta ubicacion ya esta en uso"},
"nivelUser" : {"min":4},
"tipoCorreo" : {"min":4},
"codigoTelefono" : {"min":4}
}
然后我用 for 遍历该字典并将其中的值传递给它
todoValido = True
print(todoValido)
for nombreCampo, config in listaCondicion.items():
if bool(validaciones.validarCampos(page, eval(nombreCampo), config["min"])) == True:
print("entro en la validacion de campos")
todoValido = False
if "query" in config:
if bool(validaciones.validarConsultas(page, config["query"], config["param"], config["msj"])) or todoValido == True:
todoValido = False
print("paso por validacion de la consulta")
else: print("no paso nada")
print(todoValido)
if todoValido == True:
print("pasaste a la siguiente seccion del formulario")
print()
在界面中,您可以看到它显然工作正常,但我在其中添加了一些打印以更好地遵循周期,它总是给我这个结果
True
no paso nada
no paso nada
paso por consulta
no paso nada
no paso nada
no paso nada
False
我不知道该怎么办,它总是忽略第一个条件,如果所有字段都经过正确验证,它不会让我进入下一个表单
这是我用来验证的类,以防您需要它
class validaciones:
#CONDICIONES
condicionAlfanum = r"^[0-9A-Za-z]*$"
condicionEspacio = r"^[^\s]+$"
def validarCampos(page, campo, min):
if not campo.value:
campo.error_text = mensaje.campoFaltante
page.update()
return False
elif len(campo.value) < min:
campo.error_text = mensaje.minimoCaracteres(min)
page.update()
return False
def validarConsultas(page, consulta, parametros, mensaje):
if db.consultaConRetorno(consulta, parametros):
page.snack_bar = SnackBar(content=Text(mensaje))
page.snack_bar.open = True
page.update()
return False
我希望你能帮助我,如果我能让它工作,我将能够将其应用到我的所有代码中,提前感谢
问题是:
要改变什么
这是要更正的代码
todoValido = True # Start by assuming everything is valid
for nombreCampo, config in listaCondicion.items():
# Check if the field is valid
if not validaciones.validarCampos(page, eval(nombreCampo), config["min"]):
todoValido = False # Set to False if there's a problem
print(f"Validation failed for field: {nombreCampo}") # Tell which field failed
# Check if there's a query to validate
if "query" in config:
if not validaciones.validarConsultas(page, config["query"], config["param"], config["msj"]):
todoValido = False # Set to False if there's a problem
print(f"Query validation failed for field: {nombreCampo}") # Tell which field's query failed
# Check if everything is valid
if todoValido:
print("You can move to the next section of the form") # All fields are valid
else:
print("Some fields have errors, please check.") # There are issues