source: participacion_consulta/users/forms.py @ 77f248f

Last change on this file since 77f248f was 3625c13, checked in by rudmanmrrod <rudman22@…>, 7 años ago

Añadidas funciones para cargar los municipios y parroquias de acuerdo al seleccionado, todo por REST

  • Propiedad mode establecida a 100644
File size: 8.6 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 = cargar_municipios(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 = cargar_parroquias(self.data['municipio'])
132       
133        self.fields['estado'].choices = cargar_entidad()
134        self.fields['municipio'].choices = cargar_municipios()
135        self.fields['parroquia'].choices = cargar_parroquias()
136       
137   
138    ## Nombre de usuario
139    username = forms.CharField(max_length=30,
140        widget=forms.TextInput(attrs={'class': 'form-control input-md',}),
141        label="Nombre de Usuario"
142        )
143   
144    ## Contraseña
145    password = forms.CharField(max_length=20,
146        widget=forms.TextInput(attrs={'class': 'form-control input-md','type':'password'}),
147        label="Constraseña"
148        )
149   
150    ## Repita la Contraseña
151    password_repeat = forms.CharField(max_length=20,
152        widget=forms.TextInput(attrs={'class': 'form-control input-md','type':'password'}),
153        label="Repita su constraseña"
154        )
155   
156    ## nombre
157    nombre = forms.CharField(max_length=100,
158        widget=forms.TextInput(attrs={'class': 'form-control input-md',}),
159        label="Nombre"
160        )
161   
162    ## apellido
163    apellido = forms.CharField(max_length=100,
164        widget=forms.TextInput(attrs={'class': 'form-control input-md',}),
165        label="Apellido"
166        )
167   
168    ## correo
169    email = forms.EmailField(
170        widget=forms.TextInput(attrs={'class': 'form-control input-md',}),
171        label="Correo"
172        )
173   
174    ## cedula
175    cedula = CedulaField()
176   
177   
178    ## estado
179    estado = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md',
180        'onchange': "get_municipio(this.value)"}))
181   
182    ## municipio
183    municipio = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md','disabled':'disabled',
184        'onchange': "get_parroquia(this.value)"}))
185   
186    ## parroquia
187    parroquia = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md','disabled':'disabled'}))
188
189    ## Campo del captcha
190    captcha = CaptchaField()
191   
192    def clean_password_repeat(self):
193        """!
194        Método que valida si las contraseñas coinciden
195   
196        @author Rodrigo Boet (rboet at cenditel.gob.ve)
197        @copyright GNU/GPLv2
198        @date 01-03-2017
199        @param self <b>{object}</b> Objeto que instancia la clase
200        @return Retorna el campo con la validacion
201        """
202        password = self.cleaned_data['password']
203        password_repeat = self.cleaned_data['password_repeat']
204        if(password_repeat!=password):
205            raise forms.ValidationError("La contraseña no coincide")
206        return password_repeat
207   
208    def clean_cedula(self):
209        """!
210        Método que valida si la cedula es única
211   
212        @author Rodrigo Boet (rboet at cenditel.gob.ve)
213        @copyright GNU/GPLv2
214        @date 01-03-2017
215        @param self <b>{object}</b> Objeto que instancia la clase
216        @return Retorna el campo con la validacion
217        """
218        cedula = self.cleaned_data['cedula']
219        if(validate_cedula(cedula)):
220            raise forms.ValidationError("La cédula ingresada ya existe")
221        return cedula
222   
223    def clean_email(self):
224        """!
225        Método que valida si el correo es única
226   
227        @author Rodrigo Boet (rboet at cenditel.gob.ve)
228        @copyright GNU/GPLv2
229        @date 01-03-2017
230        @param self <b>{object}</b> Objeto que instancia la clase
231        @return Retorna el campo con la validacion
232        """
233        email = self.cleaned_data['email']
234        if(validate_email(email)):
235            raise forms.ValidationError("El correo ingresado ya existe")
236        return email       
237       
238    class Meta:
239        model = User
240        exclude = ['is_staff','is_active','date_joined']
241       
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.