source: consulta_publica/users/views.py @ 8edb1df

constituyenteestudiantesgeneralplan_patriasala
Last change on this file since 8edb1df was e26ee47, checked in by rudmanmrrod <rudman22@…>, 7 años ago

Solucionado bug de actualizar perfil

  • Propiedad mode establecida a 100644
File size: 10.0 KB
Ver.Línea 
[cdd72e5]1# -*- coding: utf-8 -*-
2"""
3Sistema de Consulta Pública
4
5Copyleft (@) 2017 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/wiki/ModeladoTopicos_2017
6"""
7## @package participacion.views
8#
9# Vistas correspondientes a la aplicación participacion
10# @author Rodrigo Boet (rboet at cenditel.gob.ve)
11# @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres
12# (CENDITEL) nodo Mérida - Venezuela</a>
13# @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
14# @version 1.0
[be8d917]15from django.shortcuts import render, redirect
16from django.views.generic import FormView, RedirectView, CreateView, UpdateView
[bf6bc0b]17from django.contrib.auth.mixins import LoginRequiredMixin
[be8d917]18from django.contrib.messages.views import SuccessMessageMixin
[cdd72e5]19from django.contrib.auth import authenticate, logout, login
20from django.core.urlresolvers import reverse_lazy
[bf6bc0b]21from django.contrib.auth.models import User, Group
[cdd72e5]22from django.contrib import messages
[be8d917]23from .forms import LoginForm, UserRegisterForm, PerfilForm
[bf6bc0b]24from .models import Perfil
25from base.models import Parroquia
[cdd72e5]26
[bf6bc0b]27class LoginView(FormView):
[cdd72e5]28    """!
29    Clase que gestiona la vista principal del logeo de usuario
30
31    @author Rodrigo Boet (rboet at cenditel.gob.ve)
32    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
33    @date 01-03-2017
34    @version 1.0.0
35    """
36    form_class = LoginForm
37    template_name = 'user.login.html'
[bf6bc0b]38
39    def get_success_url(self):
40        """!
41        Metodo que permite definir la url de dirección al ser válido el formulario
42   
43        @author Rodrigo Boet (rboet at cenditel.gob.ve)
44        @copyright GNU/GPLv2
45        @date 22-02-2017
46        @param self <b>{object}</b> Objeto que instancia la clase
47        @return Retorna la url
48        """
49        grupo = self.request.user.groups.get()
50        if('Participante' in grupo.name):
51            return reverse_lazy('participacion_index')
52        elif('Administrador' in grupo.name):
53            return reverse_lazy('administrador_base')
[cdd72e5]54
55    def form_valid(self, form):
56        """!
57        Metodo que valida si el formulario es valido
58   
59        @author Rodrigo Boet (rboet at cenditel.gob.ve)
60        @copyright GNU/GPLv2
61        @date 01-03-2017
62        @param self <b>{object}</b> Objeto que instancia la clase
63        @param form <b>{object}</b> Objeto que contiene el formulario de registro
64        @return Retorna el formulario validado
65        """
66        usuario = form.cleaned_data['usuario']
67        contrasena = form.cleaned_data['contrasena']
[bf6bc0b]68        usuario = authenticate(username=usuario, password=contrasena)
69        login(self.request, usuario)
70        if self.request.POST.get('remember_me') is not None:
71            # Session expira a los dos meses si no se deslogea
72            self.request.session.set_expiry(1209600)
[cdd72e5]73        return super(LoginView, self).form_valid(form)
74   
75   
76class LogoutView(RedirectView):
77    """!
78    Clase que gestiona la vista principal del deslogeo de usuario
79
80    @author Rodrigo Boet (rboet at cenditel.gob.ve)
81    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
82    @date 01-03-2017
83    @version 1.0.0
84    """
85    permanent = False
86    query_string = True
87
88    def get_redirect_url(self):
89        """!
90        Metodo que permite definir la url de dirección al ser válido el formulario
91   
92        @author Rodrigo Boet (rboet at cenditel.gob.ve)
93        @copyright GNU/GPLv2
94        @date 01-03-2017
95        @param self <b>{object}</b> Objeto que instancia la clase
96        @return Retorna la url
97        """
98        logout(self.request)
99        return reverse_lazy('login')
100
101
[be8d917]102class RegisterView(SuccessMessageMixin,FormView):
[cdd72e5]103    """!
104    Muestra el formulario de registro de usuarios
105
106    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
107    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
108    @date 09-01-2017
109    @version 1.0.0
110    """
111    template_name = "user.register.html"
112    form_class = UserRegisterForm
[bf6bc0b]113    success_url = reverse_lazy('login')
[be8d917]114    success_message = "Se registró con éxito"
[cdd72e5]115    model = User
116
117    def form_valid(self, form, **kwargs):
[bf6bc0b]118        """!
119        Metodo que valida si el formulario es valido
120   
121        @author Rodrigo Boet (rboet at cenditel.gob.ve)
122        @copyright GNU/GPLv2
123        @date 20-04-2017
124        @param self <b>{object}</b> Objeto que instancia la clase
125        @param form <b>{object}</b> Objeto que contiene el formulario de registro
126        @return Retorna el formulario validado
[cdd72e5]127        """
[bf6bc0b]128        self.object = form.save()
129        self.object.username = form.cleaned_data['username']
130        self.object.first_name = form.cleaned_data['nombre']
131        self.object.last_name = form.cleaned_data['apellido']
132        self.object.set_password(form.cleaned_data['password'])
133        self.object.email = form.cleaned_data['email']
134        self.object.save()
135       
136        ## Se asigna el grupo de Participantes por defecto
137        self.object.groups.add(2)
138       
139        parroquia = Parroquia.objects.get(id=form.cleaned_data['parroquia'])
140       
141        perfil = Perfil()
142        perfil.cedula = form.cleaned_data['cedula']
[0b2127c]143        perfil.sector = form.cleaned_data['sector']
144        if(perfil.sector=='TR'):
145            perfil.sector_trabajador = form.cleaned_data['sector_trabajador']
146        elif(perfil.sector=='ES'):
147            perfil.sector_estudiante = form.cleaned_data['sector_estudiante']
148        perfil.participacion = form.cleaned_data['participacion']
149        if(perfil.participacion=='CO'):
150            perfil.colectivo = form.cleaned_data['colectivo']
[bf6bc0b]151        perfil.parroquia = parroquia
152        perfil.user = self.object
153        perfil.save() 
154       
[be8d917]155        return super(RegisterView, self).form_valid(form)
156   
157class PerfilUpdate(SuccessMessageMixin,LoginRequiredMixin,UpdateView):
158    """!
159    Clase que gestiona la actualización del perfil
160
161    @author Rodrigo Boet (rboet at cenditel.gob.ve)
162    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
163    @date 24-04-2017
164    @version 1.0.0
165    """
166    model = Perfil
167    template_name = "perfil.update.html"
168    form_class = PerfilForm
169    success_message = "Se actualizó el perfil con éxito"
170   
171    def dispatch(self, request, *args, **kwargs):
172        """
173        Metodo que redirecciona al usuario si no cuenta con los permisos
174   
175        @author Rodrigo Boet (rboet at cenditel.gob.ve)
176        @copyright GNU/GPLv2
177        @date 24-04-2017
178        @param self <b>{object}</b> Objeto que instancia la clase
179        @param request <b>{object}</b> Objeto que contiene la petición
180        @param args <b>{object}</b> Objeto que contiene los argumentos
181        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
[e26ee47]182        @return Direcciona al 403 si no es su perfil
[be8d917]183        """
[e26ee47]184        if int(self.request.user.id) != int(self.kwargs['pk']):
185           return redirect('base_403')
[be8d917]186        return super(PerfilUpdate, self).dispatch(request, *args, **kwargs)
187   
[e26ee47]188    def get_object(self, queryset=None):
189        """
190        Metodo para obtener el objeto de la consulta
[0b2127c]191   
192        @author Rodrigo Boet (rboet at cenditel.gob.ve)
193        @copyright GNU/GPLv2
[e26ee47]194        @date 24-05-2017
[0b2127c]195        @param self <b>{object}</b> Objeto que instancia la clase
[e26ee47]196        @param queryset <b>{object}</b> Objeto que contiene una consulta
197        @return El objeto del perfil
[0b2127c]198        """
[e26ee47]199        obj = Perfil.objects.get(user_id=self.kwargs['pk'])
200        return obj
[0b2127c]201   
[be8d917]202    def get_success_url(self):
203        """!
204        Metodo que permite definir la url de dirección al ser válido el formulario
205   
206        @author Rodrigo Boet (rboet at cenditel.gob.ve)
207        @copyright GNU/GPLv2
208        @date 24-04-2017
209        @param self <b>{object}</b> Objeto que instancia la clase
210        @return Retorna la url
211        """
212        return reverse_lazy('update',
213                            kwargs={'pk': self.kwargs['pk']})
214   
215    def get_initial(self):
216        """!
217        Metodo para agregar valores de inicio al formulario
218   
219        @author Rodrigo Boet (rboet at cenditel.gob.ve)
220        @copyright GNU/GPLv2
221        @date 24-04-2017
222        @param self <b>{object}</b> Objeto que instancia la clase
223        @return Retorna los valores iniciales
224        """
225        initial = super(PerfilUpdate, self).get_initial()
[e26ee47]226        perfil = Perfil.objects.get(user_id=self.kwargs['pk'])
[be8d917]227        initial['parroquia'] = perfil.parroquia_id
228        initial['municipio'] = perfil.parroquia.municipio_id
229        initial['estado'] = perfil.parroquia.municipio.entidad_id
[0b2127c]230        initial['sector'] = perfil.sector
231        initial['participacion'] = perfil.participacion
232        initial['colectivo'] = perfil.colectivo
[be8d917]233   
234        return initial
235   
236    def form_valid(self,form):
237        """!
238        Metodo que valida si el formulario es valido
239   
240        @author Rodrigo Boet (rboet at cenditel.gob.ve)
241        @copyright GNU/GPLv2
242        @date 24-04-2017
243        @param self <b>{object}</b> Objeto que instancia la clase
244        @param form <b>{object}</b> Objeto que contiene el formulario de registro
245        @return Retorna el formulario validado
246        """
247        parroquia = Parroquia.objects.get(id=form.cleaned_data['parroquia'])
248       
249        self.object = form.save()
250        self.object.cedula = form.cleaned_data['cedula']
[0b2127c]251        self.sector = form.cleaned_data['sector']
252        if(self.sector=='TR'):
253            self.sector_trabajador = form.cleaned_data['sector_trabajador']
254        elif(self.sector=='ES'):
255            self.sector_estudiante = form.cleaned_data['sector_estudiante']
256        self.participacion = form.cleaned_data['participacion']
257        if(self.participacion=='CO'):
258            self.colectivo = form.cleaned_data['colectivo']
[be8d917]259        self.object.parroquia = parroquia
260        self.object.save()
261       
262        return super(PerfilUpdate, self).form_valid(form)
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.