From 41392004f80c6e5b42bf2a98ec95330c468b04f2 Mon Sep 17 00:00:00 2001 From: "Marcelo Jorge Vieira (metal" Date: Wed, 22 Oct 2008 15:13:14 -0200 Subject: [PATCH] Changes in eventos/views.py * Refactored login() and logout() to use authenticate instead of AuthenticationForm * Added class SpeakerForm and TalkForm() * Replaced 'newforms' to 'forms' in eventos/forms.py * Refactored speaker_add(), speaker_details(), talk_details() and talk_add() to use ModelForm instead of form_for_instance and form_for_model --- eventos/views.py | 61 ++++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/eventos/views.py b/eventos/views.py index bd771c1..d0ef185 100644 --- a/eventos/views.py +++ b/eventos/views.py @@ -17,10 +17,10 @@ # Boston, MA 02111-1307, USA. from django.conf import settings from django.http import HttpResponseRedirect, HttpResponseForbidden -from django.contrib import auth -from django.contrib.auth.forms import AuthenticationForm +from django.contrib.auth import authenticate, login as login_django, \ + logout as logout_django from django.contrib.auth.models import User, Group -from django.newforms import form_for_instance, form_for_model, HiddenInput +from django.forms import HiddenInput, ModelForm from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext, Context, loader from eventos.models import Palestrante, Trabalho, TipoTrabalho, Trilha, Evento @@ -29,6 +29,15 @@ from eventos.forms import RegisterSpeaker forbidden = \ HttpResponseForbidden('

You are not allowed to do this action.

') +class SpeakerForm(ModelForm): + class Meta: + model = Palestrante + exclude = ('usuario',) + +class TalkForm(ModelForm): + class Meta: + model = Trabalho + def login(request): """This is a function that will be used as a front-end to the django's login system. It receives username and password fields @@ -37,13 +46,13 @@ def login(request): If login is successful, user will be redirected to the referer address, otherwise will be redirected to /?login_failed. """ - errors = {} - manipulator = AuthenticationForm(request) - if request.POST: - errors = manipulator.get_validation_errors(request.POST) - got_user = manipulator.get_user() - if got_user: - auth.login(request, got_user) + username = request.POST['username'] + password = request.POST['password'] + user = authenticate(username=username, password=password) + + if user is not None: + if user.is_active: + login_django(request, user) try: request.session.delete_test_cookie() except KeyError: @@ -51,6 +60,8 @@ def login(request): return HttpResponseRedirect('/') else: return HttpResponseRedirect('/?login_failed') + else: + return HttpResponseRedirect('/?login_failed') request.session.set_test_cookie() return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) @@ -59,7 +70,7 @@ def logout(request): """Simple front-end to django's logout stuff. This function should be mapped to an url and simply called without any parameter. """ - auth.logout(request) + logout_django(request) return HttpResponseRedirect('/') def speaker_add(request): @@ -67,9 +78,7 @@ def speaker_add(request): """ uform = RegisterSpeaker(request.POST or None) - FormKlass = form_for_model(Palestrante) - form = FormKlass(request.POST or None) - del form.fields['usuario'] + form = SpeakerForm(request.POST or None) if request.POST and form.is_valid() and uform.is_valid(): cd = uform.cleaned_data @@ -106,10 +115,8 @@ def speaker_details(request, lid): if entity.id != int(lid): return forbidden - FormKlass = form_for_instance(entity) - del FormKlass.base_fields['usuario'] + form = SpeakerForm(request.POST or None, instance=entity) - form = FormKlass(request.POST or None) if request.POST and form.is_valid(): form.save() @@ -142,8 +149,7 @@ def talk_details(request, tid): # building the form entity = get_object_or_404(Trabalho, pk=tid) - FormKlass = form_for_instance(entity) - form = FormKlass(request.POST or None) + form = TalkForm(request.POST or None, instance=entity) # These fields should not be shown to the user. form.fields['palestrante'].widget = HiddenInput() @@ -192,19 +198,18 @@ def talk_add(request): if not hasattr(request.user, 'palestrante_set'): return forbidden + # building the form + form = TalkForm(request.POST or None) + + # These fields should not be shown to the user. + # Selected in settings.py (SITE_ID) variable, because an event can # be linked with only one site. - event = Evento.objects.get(site__id__exact=settings.SITE_ID) - - # building the form entity = request.user.palestrante_set.get() - FormKlass = form_for_model(Trabalho) - form = FormKlass(request.POST or None, - initial={'palestrante': entity.id, 'evento': event.id}) + form.fields['palestrante'].widget = HiddenInput(attrs={'value' : entity.id}) - # These fields should not be shown to the user. - form.fields['palestrante'].widget = HiddenInput() - form.fields['evento'].widget = HiddenInput() + event = Evento.objects.get(site__id__exact=settings.SITE_ID) + form.fields['evento'].widget = HiddenInput(attrs={'value' : event.id}) # These fields are event specific trilhas = Trilha.objects.filter(evento=event) -- 2.20.1