From 3218dbfe3ee0eb9b73da12705559ad15c80fbc05 Mon Sep 17 00:00:00 2001 From: Lincoln de Sousa Date: Tue, 25 Sep 2007 20:48:18 -0300 Subject: [PATCH] =?utf8?q?heavy=20cleanup=20na=20parte=20de=20valida=C3=A7?= =?utf8?q?=C3=A3o=20dos=20forms?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- forms.py | 38 ++++++--- views.py | 251 ++++++++++++++++++++++--------------------------------- 2 files changed, 128 insertions(+), 161 deletions(-) diff --git a/forms.py b/forms.py index ed1034d..d13036d 100644 --- a/forms.py +++ b/forms.py @@ -18,13 +18,33 @@ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. """ from django import newforms as forms +from django.newforms import ValidationError from django.newforms.widgets import Textarea, PasswordInput +from django.contrib.auth.models import User from eventmanager.eventos.models import \ TipoTrabalho, CategoriaTrabalho, Palestrante, STATE_CHOICES MKCHOICES = lambda K, xid=-1:[(x.id, str(x)) for x in K.objects.all() \ if xid != x.id] +class LoginBase(forms.Form): + nome_usuario = forms.CharField(max_length=100) + senha = forms.CharField(max_length=100, widget=PasswordInput()) + senha_2 = forms.CharField(max_length=100, widget=PasswordInput(), + label='Conferir Senha') + + def clean_nome_usuario(self): + try: + User.objects.get(username=self.cleaned_data['nome_usuario']) + raise ValidationError('Já existe um usuário com esse nome') + except User.DoesNotExist: + return self.cleaned_data['nome_usuario'] + + def clean_senha_2(self): + if self.cleaned_data['senha'] != self.cleaned_data['senha_2']: + raise ValidationError('A confirmação não confere com a senha') + return self.cleaned_data['senha_2'] + class SubmeterTrabalho(forms.Form): def __init__(self, request, *args, **kwargs): super(SubmeterTrabalho, self).__init__(*args, **kwargs) @@ -52,12 +72,8 @@ class SubmeterTrabalho(forms.Form): 'ex.: Computadores, softwares, etc. Máximo de 300 caracteres.') outros_palestrantes = forms.MultipleChoiceField(required=0) -class CadastroPalestrante(forms.Form): +class CadastroPalestrante(LoginBase): nome_completo = forms.CharField(max_length=100) - nome_usuario = forms.CharField(max_length=100) - senha = forms.CharField(max_length=100, widget=PasswordInput()) - senha_2 = forms.CharField(max_length=100, widget=PasswordInput(), - label='Conferir Senha') email = forms.CharField(max_length=100) telefone = forms.CharField(required=False) @@ -76,6 +92,12 @@ class CadastroPalestrante(forms.Form): cidade = forms.CharField(max_length=100) uf = forms.ChoiceField(choices=STATE_CHOICES) + def clean_celular(self): + if not self.cleaned_data['telefone'] and \ + not self.cleaned_data['celular']: + raise ValidationError('Algum número de precisa ser preenchido') + return self.cleaned_data['celular'] + class EditarPalestrante(forms.Form): nome = forms.CharField(max_length=100, label='Nome completo') email = forms.CharField(max_length=100) @@ -102,13 +124,9 @@ class EditarSenha(forms.Form): nova_senha_2 = forms.CharField(max_length=100, widget=PasswordInput(), label='Conferir Senha') -class InscricaoBase(forms.Form): +class InscricaoBase(LoginBase): nome_completo = forms.CharField(max_length=100) rg = forms.CharField(max_length=100) - nome_usuario = forms.CharField(max_length=100) - senha = forms.CharField(max_length=100, widget=PasswordInput()) - senha_2 = forms.CharField(max_length=100, widget=PasswordInput(), - label='Conferir Senha') email = forms.CharField(max_length=100) rua = forms.CharField(max_length=100) diff --git a/views.py b/views.py index 97da703..312ac45 100644 --- a/views.py +++ b/views.py @@ -70,79 +70,63 @@ def index(request): def cadastro_palestrante(request): form = CadastroPalestrante(request.POST or None) ok = False + c = {'form': form} if request.POST and form.is_valid(): cd = form.cleaned_data badattr = form.errors - wrong = False - if not cd['telefone'] and not cd['celular']: - badattr['telefone_comercial'] = \ - ['Algum número de telefone precisa ser informado'] - wrong = True - - # don't save duplicated users... + group = Group.objects.get_or_create(name='palestrantes')[0] + + user = User(username=cd['nome_usuario'], email=cd['email']) + user.set_password(cd['senha']) + user.is_active = False + user.save() + user.groups.add(group) + + p = Palestrante() + p.usuario = user + + p.nome = cd['nome_completo'] + p.email = cd['email'] + p.telefone = cd['telefone'] + p.celular = cd['celular'] + p.instituicao = cd['instituicao'] + p.rua = cd['rua'] + p.numero = cd['numero'] + p.bairro = cd['bairro'] + p.cidade = cd['cidade'] + p.uf = cd['uf'] + p.minicurriculo = cd['minicurriculo'] + p.curriculo = cd['curriculo'] + p.save() + + for i in cd.get('area_interesse', []): + p.area_interesse.add(i) + + pid = p.id + md5_email = sha.new(cd['email']).hexdigest() + email = '%s <%s>' % (cd['nome_completo'], cd['email']) + link = '%s/verificar?c=%s&c1=%s' % (get_host(request), + pid, md5_email) + t = loader.get_template('email-palestrante.html') + ec = Context(dict(fulano=['nome_usuario'], link=link)) + + # to be shown in template... + c.update({'email': email}) try: - User.objects.get(username=cd['nome_usuario']) - badattr['nome_usuario'] = ['Este nome de usuário já existe!'] - wrong = True - transaction.rollback() - except User.DoesNotExist: - pass - - if cd['senha'] != cd['senha_2']: - badattr['senha_2'] = ['A senha não confere'] - wrong = True + # XXX: maybe is not a good so prety put things hardcoded =( + m = EmailMessage('Encontro Mineiro de Software Livre', + t.render(ec), FROM_EMAIL, [email]) + m.send() + except Exception: + badattr['email'] = \ + ['Desculpe mas não pude enviar o email de confirmação'] transaction.rollback() + else: + ok = True + c.update({'ok': ok}) + transaction.commit() - if not wrong: - group = Group.objects.get_or_create(name='palestrantes')[0] - - user = User(username=cd['nome_usuario'], email=cd['email']) - user.set_password(cd['senha']) - user.is_active = False - user.save() - user.groups.add(group) - - p = Palestrante() - p.usuario = user - - p.nome = cd['nome_completo'] - p.email = cd['email'] - p.telefone = cd['telefone'] - p.celular = cd['celular'] - p.instituicao = cd['instituicao'] - p.rua = cd['rua'] - p.numero = cd['numero'] - p.bairro = cd['bairro'] - p.cidade = cd['cidade'] - p.uf = cd['uf'] - p.minicurriculo = cd['minicurriculo'] - p.curriculo = cd['curriculo'] - p.save() - - for i in cd.get('area_interesse', []): - p.area_interesse.add(i) - - pid = p.id - md5_email = sha.new(cd['email']).hexdigest() - email = '%s <%s>' % (cd['nome_completo'], cd['email']) - link = '%s/verificar?c=%s&c1=%s' % (get_host(request), - pid, md5_email) - t = loader.get_template('email-palestrante.html') - c = Context(dict(fulano=['nome_usuario'], link=link)) - try: - m = EmailMessage('Encontro Mineiro de Software Livre', - t.render(c), FROM_EMAIL, [email]) - m.send() - except Exception: - badattr['email'] = \ - ['Desculpe mas não pude enviar o email de confirmação'] - transaction.rollback() - else: - ok = True - transaction.commit() - - c = {'form': form, 'ok': ok} return build_response(request, 'cadastro.html', c) @@ -158,105 +142,70 @@ def inscricao_individual(request): ok = False if request.POST and form.is_valid(): cd = form.cleaned_data - badattr = form.errors - wrong = False - - # don't save duplicated users... - try: - User.objects.get(username=cd['nome_usuario']) - badattr['nome_usuario'] = ['Este nome de usuário já existe!'] - wrong = True - transaction.rollback() - except User.DoesNotExist: - pass - if not wrong and cd['senha'] != cd['senha_2']: - badattr['senha_2'] = ['A senha não confere'] - wrong = True - transaction.rollback() + group = Group.objects.get_or_create(name='participantes')[0] + + user = User(username=cd['nome_usuario'], email=cd['email']) + user.set_password(cd['senha']) + user.is_active = False + user.save() + user.groups.add(group) + + p = Participante() + p.usuario = user + p.nome = cd['nome_completo'] + p.rg = cd['rg'] + p.email = cd['email'] + p.rua = cd['rua'] + p.numero = cd['numero'] + p.bairro = cd['bairro'] + p.cidade = cd['cidade'] + p.uf = cd['uf'] + p.telefone = cd['telefone'] + p.home_page = cd['home_page'] + p.save() - if not wrong: - group = Group.objects.get_or_create(name='participantes')[0] - - user = User(username=cd['nome_usuario'], email=cd['email']) - user.set_password(cd['senha']) - user.is_active = False - user.save() - user.groups.add(group) - - p = Participante() - p.nome = cd['nome_completo'] - p.rg = cd['rg'] - p.email = cd['email'] - p.rua = cd['rua'] - p.numero = cd['numero'] - p.bairro = cd['bairro'] - p.cidade = cd['cidade'] - p.uf = cd['uf'] - p.telefone = cd['telefone'] - p.home_page = cd['home_page'] - p.save() + ok = True + transaction.commit() - ok = True - transaction.commit() c = {'form': form, 'ok': ok} return build_response(request, 'inscricao_individual.html', c) @enable_login_form -@transaction.commit_manually def inscricao_caravana(request): form = InscricaoCaravana(request.POST or None) ok = False if request.POST and form.is_valid(): cd = form.cleaned_data - badattr = form.errors - wrong = False - - # don't save duplicated users... - try: - User.objects.get(username=cd['nome_usuario']) - badattr['nome_usuario'] = ['Este nome de usuário já existe!'] - wrong = True - transaction.rollback() - except User.DoesNotExist: - pass + group = Group.objects.get_or_create(name='participantes')[0] + + user = User(username=cd['nome_usuario'], email=cd['email']) + user.set_password(cd['senha']) + user.is_active = False + user.save() + user.groups.add(group) + + p = Participante() + p.usuario = user + p.nome = cd['nome_completo'] + p.rg = cd['rg'] + p.email = cd['email'] + p.rua = cd['rua'] + p.numero = cd['numero'] + p.bairro = cd['bairro'] + p.cidade = cd['cidade'] + p.uf = cd['uf'] + p.telefone = cd['telefone'] + p.home_page = cd['home_page'] + p.save() + + c = Caravana() + c.coordenador = p + c.participantes = cd['lista_nomes'] + c.save() - if not wrong and cd['senha'] != cd['senha_2']: - badattr['senha_2'] = ['A senha não confere'] - wrong = True - transaction.rollback() - - if not wrong: - group = Group.objects.get_or_create(name='participantes')[0] - - user = User(username=cd['nome_usuario'], email=cd['email']) - user.set_password(cd['senha']) - user.is_active = False - user.save() - user.groups.add(group) - - p = Participante() - p.usuario = user - p.nome = cd['nome_completo'] - p.rg = cd['rg'] - p.email = cd['email'] - p.rua = cd['rua'] - p.numero = cd['numero'] - p.bairro = cd['bairro'] - p.cidade = cd['cidade'] - p.uf = cd['uf'] - p.telefone = cd['telefone'] - p.home_page = cd['home_page'] - p.save() - - c = Caravana() - c.coordenador = p - c.participantes = cd['lista_nomes'] - c.save() - - ok = True - transaction.commit() + ok = True c = {'form': form, 'ok': ok} return build_response(request, 'inscricao_caravana.html', c) -- 2.20.1