source: participacion_consulta/users/forms.py @ fd72443

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

Centralizada la función para validar participación, agregados mensajes a sesiones, conectado el login a la api

  • Propiedad mode establecida a 100644
File size: 10.3 KB
Línea 
1# -*- coding: utf-8 -*-
2"""
3Sistema de Participación en Consultas
4
5Copyleft (@) 2017 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/wiki/ModeladoTopicos_2017
6"""
7## @package participacion.forms
8#
9# Formulario correspondiente a la aplicación participación
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='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
14# @version 1.0
15from django import forms
16from django.forms import ModelForm
17from django.contrib.auth import authenticate
18from django.contrib.auth.models import User
19from django.forms.fields import (
20    CharField, BooleanField
21)
22from django.forms.widgets import (
23    PasswordInput, CheckboxInput
24)
25from django.contrib.auth.forms import PasswordResetForm, SetPasswordForm
26from base.fields import CedulaField
27from base.functions import (
28    cargar_entidad, cargar_municipios, cargar_parroquias,
29    validate_cedula, validate_email, autenticar_rest
30    )
31from base.constant import SECTORES, PARTICIPACION, SECTOR_ESTUDIANTE, SECTOR_TRABAJADOR
32from captcha.fields import CaptchaField
33
34
35class LoginForm(forms.Form):
36    """!
37    Clase del formulario de logeo
38
39    @author Rodrigo Boet (rboet at cenditel.gob.ve)
40    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
41    @date 01-03-2017
42    @version 1.0.0
43    """
44    ## Campo de la constraseña
45    contrasena = CharField()
46   
47    ## Nombre del usuario
48    usuario = CharField()
49   
50    ## Formulario de recordarme
51    remember_me = BooleanField()
52
53    ## Campo del captcha
54    captcha = CaptchaField()
55
56    def __init__(self, *args, **kwargs):
57        """!
58        Metodo que sobreescribe cuando se inicializa el formulario
59   
60        @author Rodrigo Boet (rboet at cenditel.gob.ve)
61        @copyright GNU/GPLv2
62        @date 01-03-2017
63        @param self <b>{object}</b> Objeto que instancia la clase
64        @param args <b>{list}</b> Lista de los argumentos
65        @param kwargs <b>{dict}</b> Diccionario con argumentos
66        @return Retorna el formulario validado
67        """
68        super(LoginForm, self).__init__(*args, **kwargs)
69        self.fields['contrasena'].widget = PasswordInput()
70        self.fields['contrasena'].widget.attrs.update({'class': 'form-control',
71        'placeholder': 'Contraseña'})
72        self.fields['usuario'].widget.attrs.update({'class': 'form-control',
73        'placeholder': 'Nombre de Usuario'})
74        self.fields['remember_me'].label = "Recordar"
75        self.fields['remember_me'].widget = CheckboxInput()
76        self.fields['remember_me'].required = False
77        self.fields['captcha'].label = "Captcha"
78       
79    def clean(self):
80        """!
81        Método que valida si el usuario a autenticar es valido
82   
83        @author Rodrigo Boet (rboet at cenditel.gob.ve)
84        @copyright GNU/GPLv2
85        @date 21-04-2017
86        @param self <b>{object}</b> Objeto que instancia la clase
87        @return Retorna el campo con los errores
88        """
89        usuario = self.cleaned_data['usuario']
90        contrasena = self.cleaned_data['contrasena']
91        usuario = autenticar_rest(usuario,contrasena)
92        if(not usuario):
93            msg = "Verifique su usuario o contraseña"
94            self.add_error('usuario', msg)
95       
96    class Meta:
97        fields = ('usuario', 'contrasena', 'remember_me')
98
99
100class UserRegisterForm(forms.ModelForm):
101    """!
102    Formulario de Registro
103
104    @author Rodrigo Boet (rboet at cenditel.gob.ve)
105    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
106    @date 20-04-2017
107    @version 1.0.0
108    """
109    def __init__(self, *args, **kwargs):
110        """!
111        Metodo que sobreescribe cuando se inicializa el formulario
112   
113        @author Rodrigo Boet (rboet at cenditel.gob.ve)
114        @copyright GNU/GPLv2
115        @date 01-03-2017
116        @param self <b>{object}</b> Objeto que instancia la clase
117        @param args <b>{list}</b> Lista de los argumentos
118        @param kwargs <b>{dict}</b> Diccionario con argumentos
119        @return Retorna el formulario validado
120        """
121        super(UserRegisterForm, self).__init__(*args, **kwargs)
122       
123        # Si se ha seleccionado un estado establece el listado de municipios y elimina el atributo disable
124        if 'estado' in self.data and self.data['estado']:
125            self.fields['municipio'].widget.attrs.pop('disabled')
126            self.fields['municipio'].queryset=Municipio.objects.filter(entidad=self.data['estado'])
127
128            # Si se ha seleccionado un municipio establece el listado de parroquias y elimina el atributo disable
129            if 'municipio' in self.data and self.data['municipio']:
130                self.fields['parroquia'].widget.attrs.pop('disabled')
131                self.fields['parroquia'].queryset=Parroquia.objects.filter(municipio=self.data['municipio'])
132       
133        if 'participacion' in self.data and self.data['participacion']=='CO':
134            self.fields['colectivo'].widget.attrs.pop('readonly')
135       
136        self.fields['estado'].choices = cargar_entidad()
137        self.fields['municipio'].choices = cargar_municipios()
138        self.fields['parroquia'].choices = cargar_parroquias()
139       
140   
141    ## Nombre de usuario
142    username = forms.CharField(max_length=30,
143        widget=forms.TextInput(attrs={'class': 'form-control input-md',}),
144        label="Nombre de Usuario"
145        )
146   
147    ## Contraseña
148    password = forms.CharField(max_length=20,
149        widget=forms.TextInput(attrs={'class': 'form-control input-md','type':'password'}),
150        label="Constraseña"
151        )
152   
153    ## Repita la Contraseña
154    password_repeat = forms.CharField(max_length=20,
155        widget=forms.TextInput(attrs={'class': 'form-control input-md','type':'password'}),
156        label="Repita su constraseña"
157        )
158   
159    ## nombre
160    nombre = forms.CharField(max_length=100,
161        widget=forms.TextInput(attrs={'class': 'form-control input-md',}),
162        label="Nombre"
163        )
164   
165    ## apellido
166    apellido = forms.CharField(max_length=100,
167        widget=forms.TextInput(attrs={'class': 'form-control input-md',}),
168        label="Apellido"
169        )
170   
171    ## correo
172    email = forms.EmailField(
173        widget=forms.TextInput(attrs={'class': 'form-control input-md',}),
174        label="Correo"
175        )
176   
177    ## cedula
178    cedula = CedulaField()
179   
180    ## sector
181    sector = forms.ChoiceField(
182        widget=forms.Select(attrs={'class': 'form-control input-md','onchange':'mostrar_sector(this.value);'}),
183        label="Sector",choices=(('','Seleccione...'),)+SECTORES
184        )
185   
186    ## estado
187    estado = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md',
188        'onchange': "actualizar_combo(this.value,'base','Municipio','entidad','codigo','nombre','id_municipio')"}))
189   
190    ## municipio
191    municipio = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md','disabled':'disabled',
192        'onchange': "actualizar_combo(this.value,'base','Parroquia','municipio','codigo','nombre','id_parroquia')"}))
193   
194    ## parroquia
195    parroquia = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md','disabled':'disabled'}))
196
197    ## Campo del captcha
198    captcha = CaptchaField()
199   
200    def clean_password_repeat(self):
201        """!
202        Método que valida si las contraseñas coinciden
203   
204        @author Rodrigo Boet (rboet at cenditel.gob.ve)
205        @copyright GNU/GPLv2
206        @date 01-03-2017
207        @param self <b>{object}</b> Objeto que instancia la clase
208        @return Retorna el campo con la validacion
209        """
210        password = self.cleaned_data['password']
211        password_repeat = self.cleaned_data['password_repeat']
212        if(password_repeat!=password):
213            raise forms.ValidationError("La contraseña no coincide")
214        return password_repeat
215   
216    def clean_cedula(self):
217        """!
218        Método que valida si la cedula es única
219   
220        @author Rodrigo Boet (rboet at cenditel.gob.ve)
221        @copyright GNU/GPLv2
222        @date 01-03-2017
223        @param self <b>{object}</b> Objeto que instancia la clase
224        @return Retorna el campo con la validacion
225        """
226        cedula = self.cleaned_data['cedula']
227        if(validate_cedula(cedula)):
228            raise forms.ValidationError("La cédula ingresada ya existe")
229        return cedula
230   
231    def clean_email(self):
232        """!
233        Método que valida si el correo es única
234   
235        @author Rodrigo Boet (rboet at cenditel.gob.ve)
236        @copyright GNU/GPLv2
237        @date 01-03-2017
238        @param self <b>{object}</b> Objeto que instancia la clase
239        @return Retorna el campo con la validacion
240        """
241        email = self.cleaned_data['email']
242        if(validate_email(email)):
243            raise forms.ValidationError("El correo ingresado ya existe")
244        return email
245   
246   
247    def clean_sector_trabajador(self):
248        """!
249        Método que valida el sector trabajador
250   
251        @author Rodrigo Boet (rboet at cenditel.gob.ve)
252        @copyright GNU/GPLv2
253        @date 24-05-2017
254        @param self <b>{object}</b> Objeto que instancia la clase
255        @return Retorna el campo con la validacion
256        """
257        sector = self.cleaned_data['sector']
258        sector_trabajador = self.cleaned_data['sector_trabajador']
259        if(sector=='TR' and sector_trabajador==''):
260            raise forms.ValidationError("Debe ingresar el sector dónde trabaja")
261        return sector_trabajador
262   
263    def clean_sector_estudiante(self):
264        """!
265        Método que valida el sector estudiante
266   
267        @author Rodrigo Boet (rboet at cenditel.gob.ve)
268        @copyright GNU/GPLv2
269        @date 24-05-2017
270        @param self <b>{object}</b> Objeto que instancia la clase
271        @return Retorna el campo con la validacion
272        """
273        sector = self.cleaned_data['sector']
274        sector_estudiante = self.cleaned_data['sector_estudiante']
275        if(sector=='ES' and sector_estudiante==''):
276            raise forms.ValidationError("Debe ingresar el sector dónde estudia")
277        return sector_estudiante
278       
279       
280    class Meta:
281        model = User
282        exclude = ['is_staff','is_active','date_joined']
283       
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.