source: consulta_publica/users/views.py

baseconstituyenteestudiantesgeneralplan_patriasala
Last change on this file was be8d917, checked in by rudmanmrrod <rudman22@…>, 7 años ago

Agregado el perfil de usuario, modificados los requirements y cambiado el motor de BD a postgres

  • Propiedad mode establecida a 100644
File size: 8.5 KB
Línea 
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
15from django.shortcuts import render, redirect
16from django.views.generic import FormView, RedirectView, CreateView, UpdateView
17from django.contrib.auth.mixins import LoginRequiredMixin
18from django.contrib.messages.views import SuccessMessageMixin
19from django.contrib.auth import authenticate, logout, login
20from django.core.urlresolvers import reverse_lazy
21from django.contrib.auth.models import User, Group
22from django.contrib import messages
23from .forms import LoginForm, UserRegisterForm, PerfilForm
24from .models import Perfil
25from base.models import Parroquia
26
27class LoginView(FormView):
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'
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')
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']
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)
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
102class RegisterView(SuccessMessageMixin,FormView):
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
113    success_url = reverse_lazy('login')
114    success_message = "Se registró con éxito"
115    model = User
116
117    def form_valid(self, form, **kwargs):
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
127        """
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']
143        perfil.parroquia = parroquia
144        perfil.user = self.object
145        perfil.save() 
146       
147        return super(RegisterView, self).form_valid(form)
148   
149class PerfilUpdate(SuccessMessageMixin,LoginRequiredMixin,UpdateView):
150    """!
151    Clase que gestiona la actualización del perfil
152
153    @author Rodrigo Boet (rboet at cenditel.gob.ve)
154    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
155    @date 24-04-2017
156    @version 1.0.0
157    """
158    model = Perfil
159    template_name = "perfil.update.html"
160    form_class = PerfilForm
161    success_message = "Se actualizó el perfil con éxito"
162   
163    def dispatch(self, request, *args, **kwargs):
164        """
165        Metodo que redirecciona al usuario si no cuenta con los permisos
166   
167        @author Rodrigo Boet (rboet at cenditel.gob.ve)
168        @copyright GNU/GPLv2
169        @date 24-04-2017
170        @param self <b>{object}</b> Objeto que instancia la clase
171        @param request <b>{object}</b> Objeto que contiene la petición
172        @param args <b>{object}</b> Objeto que contiene los argumentos
173        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
174        @return: Direcciona al 403 si no es su perfil
175        """
176        if int(self.request.user.id) != int(self.kwargs['pk']):
177            return redirect('base_403')
178        return super(PerfilUpdate, self).dispatch(request, *args, **kwargs)
179   
180    def get_success_url(self):
181        """!
182        Metodo que permite definir la url de dirección al ser válido el formulario
183   
184        @author Rodrigo Boet (rboet at cenditel.gob.ve)
185        @copyright GNU/GPLv2
186        @date 24-04-2017
187        @param self <b>{object}</b> Objeto que instancia la clase
188        @return Retorna la url
189        """
190        return reverse_lazy('update',
191                            kwargs={'pk': self.kwargs['pk']})
192   
193    def get_initial(self):
194        """!
195        Metodo para agregar valores de inicio al formulario
196   
197        @author Rodrigo Boet (rboet at cenditel.gob.ve)
198        @copyright GNU/GPLv2
199        @date 24-04-2017
200        @param self <b>{object}</b> Objeto que instancia la clase
201        @return Retorna los valores iniciales
202        """
203        initial = super(PerfilUpdate, self).get_initial()
204        perfil = Perfil.objects.get(pk=self.kwargs['pk'])
205        initial['parroquia'] = perfil.parroquia_id
206        initial['municipio'] = perfil.parroquia.municipio_id
207        initial['estado'] = perfil.parroquia.municipio.entidad_id
208   
209        return initial
210   
211    def form_valid(self,form):
212        """!
213        Metodo que valida si el formulario es valido
214   
215        @author Rodrigo Boet (rboet at cenditel.gob.ve)
216        @copyright GNU/GPLv2
217        @date 24-04-2017
218        @param self <b>{object}</b> Objeto que instancia la clase
219        @param form <b>{object}</b> Objeto que contiene el formulario de registro
220        @return Retorna el formulario validado
221        """
222        parroquia = Parroquia.objects.get(id=form.cleaned_data['parroquia'])
223       
224        self.object = form.save()
225        self.object.cedula = form.cleaned_data['cedula']
226        self.object.parroquia = parroquia
227        self.object.save()
228       
229        return super(PerfilUpdate, self).form_valid(form)
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.