2
respostas

Django - Problema validacao form

Pessoal,

Verifiquei o seguinte case (Curso do Django modulo 11): Se nao informo algum dos campos do form (todos são obrigatorios), ele faz o redirect para uma pagina e não me valida os dados/form. Alguém pode dar um help? Agradeço. Obrigado

from django import forms
from django.contrib.auth.models import User

class RegistrarUsuarioForm(forms.Form):
    nome = forms.CharField(required=True)
    email = forms.EmailField(required=True)
    senha = forms.CharField(required=True)
    telefone = forms.CharField(required=True)
    nome_empresa = forms.CharField(required=True)

    def is_valid(self):
        valid = True
        if not super(RegistrarUsuarioForm, self).is_valid():
            self.adiciona_erro('Por favor, verifique os dados informados.')
            valid = False

        user_exists = User.objects.filter(username=self.data['nome']).exists()

        if user_exists:
            self.adiciona_erro('Usuario ja existente.')
            valid = False
        return valid

    def adiciona_erro(self, message):
        errors = self._errors.setdefault(forms.forms.NON_FIELD_ERRORS, forms.utils.ErrorList())
        errors.append(message)


from django.shortcuts import redirect
from django.shortcuts import render
from django.contrib.auth.models import User
from django.views.generic.base import View
from perfis.models import Perfil
from usuarios.forms import RegistrarUsuarioForm

class RegistrarUsuarioView(View):

    template_name = 'registrar.html'

    def get(self, request):
        return render(request, self.template_name)

    def post(self, request):
        form = RegistrarUsuarioForm(request.POST)

        if form.is_valid():
            dados_form = form.data
            #cria o usuario
            usuario = User.objects.create_user(dados_form['nome'], dados_form['email'], dados_form['senha'])
            #cria o perfil
            perfil = Perfil(nome=dados_form['nome'], 
                            email=dados_form['email'],
                            telefone=dados_form['telefone'], 
                            nome_empresa=dados_form['nome_empresa'], 
                            usuario=usuario)
            perfil.save()

            #redireciona para index
            return redirect('index')

        return render(request, self.template_name, {'form' : form})
2 respostas

Pessoal, help-me please.

Se eu preencho o campo email com um email invalido ele me manda para a index (não entra no if e printa so o 99). Não estou conseguindo entender como ele ta me mandando para a index, in pratica ele deveria ficar na pagina de registracao e me mostrar os erros etc.

    def post(self, request):
        form = RegistrarUsuarioForm(request.POST)

        print('99 @@@@@@@@@@@@@@@@@@@@@@@@@@@@')    

        if form.is_valid():

            print('1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@')    

            dados_form = form.data
            usuario = User.objects.create_user(dados_form['nome'], dados_form['email'], dados_form['senha'])
            perfil = Perfil(nome=dados_form['nome'], email=dados_form['email'], telefone=dados_form['telefone'], nome_empresa=dados_form['nome_empresa'], usuario=usuario)
            perfil.save()

            print('2 @@@@@@@@@@@@@@@@@@@@@@@@@@@@')    
            return redirect('index')

        print('3 @@@@@@@@@@@@@@@@@@@@@@@@@@@@')    
        return render(request, self.template_name, {'form' : form})

Edvaldo, tudo bem ?

Cara vou pedir para você abrir um novo tópico, só que desta vez coloca o tipo da dúvida, você acabou deixando como off topic ai o pessoal não consegue te ajudar tanto. :(