From 71d5020d87c6ffbdf4b30ab07937623563b45c6d Mon Sep 17 00:00:00 2001 From: Lincoln de Sousa Date: Tue, 1 Jul 2008 21:39:11 -0300 Subject: [PATCH] implementing lecturer registration feature --- eventos/forms.py | 21 ++++++++++++ eventos/templates/eventos/lecturer-add.html | 11 ++++++ eventos/urls.py | 1 + eventos/views.py | 37 ++++++++++++++++++++- templates/base.html | 2 +- 5 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 eventos/templates/eventos/lecturer-add.html diff --git a/eventos/forms.py b/eventos/forms.py index 8e3980e..3c8acea 100644 --- a/eventos/forms.py +++ b/eventos/forms.py @@ -15,3 +15,24 @@ # License along with this program; if not, write to the # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. +from django import newforms as forms +from django.newforms import PasswordInput, ValidationError +from django.contrib.auth.models import User + + +class RegisterLecturer(forms.Form): + username = forms.CharField(max_length=20, label=u'Usuário para login') + password1 = forms.CharField(widget=PasswordInput, label='Senha') + password2 = forms.CharField(widget=PasswordInput, label='Confirmar Senha') + + def clean_password2(self): + if self.cleaned_data['password1'] != self.cleaned_data['password2']: + raise ValidationError('A confirmação não confere com a senha') + return self.cleaned_data['password2'] + + def clean_username(self): + try: + User.objects.get(username=self.cleaned_data['username']) + raise ValidationError('Já existe um usuário com esse nome') + except User.DoesNotExist: + return self.cleaned_data['username'] diff --git a/eventos/templates/eventos/lecturer-add.html b/eventos/templates/eventos/lecturer-add.html new file mode 100644 index 0000000..79d026e --- /dev/null +++ b/eventos/templates/eventos/lecturer-add.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block content %} +
+ {{ uform.as_p }} + + {{ form.as_p }} + + +
+{% endblock %} diff --git a/eventos/urls.py b/eventos/urls.py index 35bb882..b0637a2 100644 --- a/eventos/urls.py +++ b/eventos/urls.py @@ -3,6 +3,7 @@ from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^login/', 'eventos.views.login'), (r'^logout/', 'eventos.views.logout'), + (r'^lecturer/add/$', 'eventos.views.lecturer_add'), (r'^lecturer/(\d+)/$', 'eventos.views.lecturer_details'), (r'^lecturer/(\d+)/talks/$', 'eventos.views.lecturer_talks'), (r'^talks/(\d+)/$', 'eventos.views.talk_details'), diff --git a/eventos/views.py b/eventos/views.py index 98a1f92..b5ab128 100644 --- a/eventos/views.py +++ b/eventos/views.py @@ -18,10 +18,12 @@ from django.http import HttpResponseRedirect, HttpResponseForbidden from django.contrib import auth from django.contrib.auth.forms import AuthenticationForm -from django.newforms import form_for_instance, form_for_model, HiddenInput +from django.contrib.auth.models import User, Group +from django.newforms import form_for_instance, form_for_model from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext, Context, loader from eventos.models import Palestrante, Trabalho +from eventos.forms import RegisterLecturer forbidden = \ HttpResponseForbidden('

You are not allowed to do this action.

') @@ -59,6 +61,39 @@ def logout(request): auth.logout(request) return HttpResponseRedirect('/') +def lecturer_add(request): + """Adds a new lecturer to the system. + """ + uform = RegisterLecturer(request.POST or None) + + FormKlass = form_for_model(Palestrante) + form = FormKlass(request.POST or None) + del form.fields['usuario'] + + if request.POST and form.is_valid() and uform.is_valid(): + cd = uform.cleaned_data + group = Group.objects.get_or_create(name='palestrantes')[0] + + # creating the user that will be set as the user of the + # lecturer. + user = User(username=cd['username']) + user.set_password(cd['password1']) + user.is_active = True + user.save() + user.groups.add(group) + + # this commit=False is to avoid IntegritErrors, because at + # this point, the lecturer doesn't have an user associated + # with it. + instance = form.save(commit=False) + instance.usuario = user + instance.save() + return HttpResponseRedirect('/') + + c = {'form': form, 'uform': uform} + return render_to_response('eventos/lecturer-add.html', Context(c), + context_instance=RequestContext(request)) + def lecturer_details(request, lid): """Shows a simple form containing all editable fields of a lecturer and gives the lecturer the possibility to save them =) diff --git a/templates/base.html b/templates/base.html index 4f285c7..d2afc6d 100644 --- a/templates/base.html +++ b/templates/base.html @@ -43,7 +43,7 @@
  • Sair
  • {% else %} -
  • Cadastre-se para enviar trabalhos
  • +
  • Cadastre-se para enviar trabalhos
  • Cadastre-se para participar
  • {% endif %} -- 2.20.1