Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Validação não acontece

Vi acima que muitos estao tendo o mesmo problema. Tentei solucionar con a identação mas nao consigo. https://github.com/Guilhwe/alura_space_django

5 respostas

Bom dia, Guilherme! Tudo bem?

Para eu conseguir te ajudar da melhor maneira possível preciso que você compartilhe mais informações sobre o problema que você está tendo no projeto, assim poderei dar um foco mais especializado nele. Então, compartilhe prints ou logs que informam a inconsistência no projeto.

Fico no aguardo e à disposição

Nao estou conseguindo mandar imagens por alguma razao pelo forum. Como faço para que você possa verlas?

Opa, Guilherme!

Para compartilhar imagens aqui você pode copiar de algum lugar ou fazer o print e copiar aqui no post do fórum, mas é importante que tenha clicado na caixa de texto. O processo de envio da imagem para o post é um pouco demorado, então depois de um tempo vai aparecer uma estrutura assim: ![]() com algumas informações entre os colchetes e chaves.

Ou você pode enviar os prints para uma pasta do Drive do Google e compartilhar ela aqui, lembre que se escolher essa opção você deve dar permissão quando for compartilhar.

Tentei colar a imagen e nao deu assim que passo link do drive con as prints. https://drive.google.com/drive/folders/1UBBuRXGGpwROtLeJXz8RvCIlEktuxUan?usp=sharing O problema está en que cuando crio un user con espaços no meio de nome(que se supõe que não deveria poder criarse), a senha pode ser até diferente que o usuario se vai criar independentemente de tudo.

solução!

Bom dia, Guilherme! Tudo bem?

Depois de um tempo testando alguns casos no código projeto, consegui entender porque a verificação do espaço no campo do nome do usuário não era feita. O problema está relacionado à ordem em que as validações são executadas no view.

Quando você verifica se o formulário é válido com form.is_valid(), o Django chama os métodos de validação personalizados, como clean_nombre_registro. No entanto, o código que compara as senhas (form['contraseña1'].value() != form['contraseña2'].value()) está sendo executado antes da verificação de validade do formulário ser concluída. Isso pode estar causando comportamentos inesperados.

Então, é necessário realizar 2 ajustes no seu código:

  1. Primeiro no arquivo forms.py: adicione um método de validação e comparação entre as senhas inseridas nos dois campos, assim tirando a necessidade da validação no arquivo views.py:

        def clean_senha(self):
            cleaned_data = super().clean()
            contraseña1 = cleaned_data.get("contraseña1")
            contraseña2 = cleaned_data.get("contraseña2")
    
            if contraseña1 and contraseña2 and contraseña1 != contraseña2:
                raise forms.ValidationError('Las contraseñas no coinciden')
            else:
                return contraseña2
    
  2. Agora no arquivo views.py: retire a verificação de compatibilidade das senha e ajuste a indentação de tudo que vem depois do if form.is_valid(): para um nível abaixo:

    def registro(request):
    
        form = RegistroForms()
    
        if request.method == 'POST':
            form =RegistroForms(request.POST)
    
    
            if form.is_valid():
                nombre = form['nombre_registro'].value()
                email = form['email'].value()
                contraseña = form['contraseña1'].value()
                #guardar las informaciones del formularia en otras variables para hacerlo  mas manejable
    
                if User.objects.filter(username=nombre).exists():
                    messages.error(request, 'El usuario ya está registrado')
                    return redirect('registro')
                #verifica si el usuario ya exite
                usuario = User.objects.create_user(
                        username = nombre,
                        email=email,
                        password=contraseña,
                        )
                usuario.save()
                messages.success(request, 'Registrado con éxito')
                #crea nuevo usuario
                return redirect('login')
                #redirecciona a login
    
        return render (request, 'usuarios/registro.html', {"form" : form})
    

Após fazer esses ajustes as validações de cadastro de nome de usuário com espaço vazio e senhas diferentes estarão funcionando corretamente, mas a parte de mostragem delas é implementada na aula Mensagens de erro.

Se tiver mais algum problema estarei à disposição!