source: consulta_publica/users/forms.py

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

Removidos archivos de la migracion, actualizadas dependencias del captcha

  • Propiedad mode establecida a 100644
File size: 12.0 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.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='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</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
30    )
31from base.models import Municipio, Parroquia
32from .models import Perfil
33from captcha.fields import CaptchaField
34
35
36class LoginForm(forms.Form):
37    """!
38    Clase del formulario de logeo
39
40    @author Rodrigo Boet (rboet at cenditel.gob.ve)
41    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
42    @date 01-03-2017
43    @version 1.0.0
44    """
45    ## Campo de la constraseña
46    contrasena = CharField()
47   
48    ## Nombre del usuario
49    usuario = CharField()
50   
51    ## Formulario de recordarme
52    remember_me = BooleanField()
53
54    ## Campo del captcha
55    captcha = CaptchaField()
56
57    def __init__(self, *args, **kwargs):
58        """!
59        Metodo que sobreescribe cuando se inicializa el formulario
60   
61        @author Rodrigo Boet (rboet at cenditel.gob.ve)
62        @copyright GNU/GPLv2
63        @date 01-03-2017
64        @param self <b>{object}</b> Objeto que instancia la clase
65        @param args <b>{list}</b> Lista de los argumentos
66        @param kwargs <b>{dict}</b> Diccionario con argumentos
67        @return Retorna el formulario validado
68        """
69        super(LoginForm, self).__init__(*args, **kwargs)
70        self.fields['contrasena'].widget = PasswordInput()
71        self.fields['contrasena'].widget.attrs.update({'class': 'form-control',
72        'placeholder': 'Contraseña'})
73        self.fields['usuario'].widget.attrs.update({'class': 'form-control',
74        'placeholder': 'Nombre de Usuario'})
75        self.fields['remember_me'].label = "Recordar"
76        self.fields['remember_me'].widget = CheckboxInput()
77        self.fields['remember_me'].required = False
78        self.fields['captcha'].label = "Captcha"
79       
80    def clean(self):
81        """!
82        Método que valida si el usuario a autenticar es valido
83   
84        @author Rodrigo Boet (rboet at cenditel.gob.ve)
85        @copyright GNU/GPLv2
86        @date 21-04-2017
87        @param self <b>{object}</b> Objeto que instancia la clase
88        @return Retorna el campo con los errores
89        """
90        usuario = self.cleaned_data['usuario']
91        contrasena = self.cleaned_data['contrasena']
92        usuario = authenticate(username=usuario,password=contrasena)
93        if(not usuario):
94            msg = "Verifique su usuario o contraseña"
95            self.add_error('usuario', msg)
96       
97    class Meta:
98        fields = ('usuario', 'contrasena', 'remember_me')
99
100
101class UserRegisterForm(forms.ModelForm):
102    """!
103    Formulario de Registro
104
105    @author Rodrigo Boet (rboet at cenditel.gob.ve)
106    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
107    @date 20-04-2017
108    @version 1.0.0
109    """
110    def __init__(self, *args, **kwargs):
111        """!
112        Metodo que sobreescribe cuando se inicializa el formulario
113   
114        @author Rodrigo Boet (rboet at cenditel.gob.ve)
115        @copyright GNU/GPLv2
116        @date 01-03-2017
117        @param self <b>{object}</b> Objeto que instancia la clase
118        @param args <b>{list}</b> Lista de los argumentos
119        @param kwargs <b>{dict}</b> Diccionario con argumentos
120        @return Retorna el formulario validado
121        """
122        super(UserRegisterForm, self).__init__(*args, **kwargs)
123       
124        # Si se ha seleccionado un estado establece el listado de municipios y elimina el atributo disable
125        if 'estado' in self.data and self.data['estado']:
126            self.fields['municipio'].widget.attrs.pop('disabled')
127            self.fields['municipio'].queryset=Municipio.objects.filter(entidad=self.data['estado'])
128
129            # Si se ha seleccionado un municipio establece el listado de parroquias y elimina el atributo disable
130            if 'municipio' in self.data and self.data['municipio']:
131                self.fields['parroquia'].widget.attrs.pop('disabled')
132                self.fields['parroquia'].queryset=Parroquia.objects.filter(municipio=self.data['municipio'])
133       
134        self.fields['estado'].choices = cargar_entidad()
135        self.fields['municipio'].choices = cargar_municipios()
136        self.fields['parroquia'].choices = cargar_parroquias()
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    ## estado
178    estado = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md',
179        'onchange': "actualizar_combo(this.value,'base','Municipio','entidad','codigo','nombre','id_municipio')"}))
180   
181    ## municipio
182    municipio = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md','disabled':'disabled',
183        'onchange': "actualizar_combo(this.value,'base','Parroquia','municipio','codigo','nombre','id_parroquia')"}))
184   
185    ## parroquia
186    parroquia = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md','disabled':'disabled'}))
187
188    ## Campo del captcha
189    captcha = CaptchaField()
190   
191    def clean_password_repeat(self):
192        """!
193        Método que valida si las contraseñas coinciden
194   
195        @author Rodrigo Boet (rboet at cenditel.gob.ve)
196        @copyright GNU/GPLv2
197        @date 01-03-2017
198        @param self <b>{object}</b> Objeto que instancia la clase
199        @return Retorna el campo con la validacion
200        """
201        password = self.cleaned_data['password']
202        password_repeat = self.cleaned_data['password_repeat']
203        if(password_repeat!=password):
204            raise forms.ValidationError("La contraseña no coincide")
205        return password_repeat
206   
207    def clean_cedula(self):
208        """!
209        Método que valida si la cedula es única
210   
211        @author Rodrigo Boet (rboet at cenditel.gob.ve)
212        @copyright GNU/GPLv2
213        @date 01-03-2017
214        @param self <b>{object}</b> Objeto que instancia la clase
215        @return Retorna el campo con la validacion
216        """
217        cedula = self.cleaned_data['cedula']
218        if(validate_cedula(cedula)):
219            raise forms.ValidationError("La cédula ingresada ya existe")
220        return cedula
221   
222    def clean_email(self):
223        """!
224        Método que valida si el correo es única
225   
226        @author Rodrigo Boet (rboet at cenditel.gob.ve)
227        @copyright GNU/GPLv2
228        @date 01-03-2017
229        @param self <b>{object}</b> Objeto que instancia la clase
230        @return Retorna el campo con la validacion
231        """
232        email = self.cleaned_data['email']
233        if(validate_email(email)):
234            raise forms.ValidationError("El correo ingresado ya existe")
235        return email
236       
237    class Meta:
238        model = User
239        exclude = ['is_staff','is_active','date_joined']
240       
241class PerfilForm(forms.ModelForm):
242    """!
243    Formulario del perfil
244
245    @author Rodrigo Boet (rboet at cenditel.gob.ve)
246    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
247    @date 24-04-2017
248    @version 1.0.0
249    """
250    def __init__(self, *args, **kwargs):
251        """!
252        Metodo que sobreescribe cuando se inicializa el formulario
253   
254        @author Rodrigo Boet (rboet at cenditel.gob.ve)
255        @copyright GNU/GPLv2
256        @date 24-04-2017
257        @param self <b>{object}</b> Objeto que instancia la clase
258        @param args <b>{list}</b> Lista de los argumentos
259        @param kwargs <b>{dict}</b> Diccionario con argumentos
260        @return Retorna el formulario validado
261        """
262        super(PerfilForm, self).__init__(*args, **kwargs)
263       
264        self.fields['estado'].choices = cargar_entidad()
265        self.fields['municipio'].choices = cargar_municipios()
266        self.fields['parroquia'].choices = cargar_parroquias()
267   
268    ## cedula
269    cedula = CedulaField()
270   
271    ## estado
272    estado = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md',
273        'onchange': "actualizar_combo(this.value,'base','Municipio','entidad','codigo','nombre','id_municipio')"}))
274   
275    ## municipio
276    municipio = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md',
277        'onchange': "actualizar_combo(this.value,'base','Parroquia','municipio','codigo','nombre','id_parroquia')"}))
278   
279    ## parroquia
280    parroquia = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md',}))
281   
282    class Meta:
283        model = Perfil
284        exclude = ['user','parroquia']
285       
286       
287class PasswordResetForm(PasswordResetForm):
288    """!
289    Clase del formulario de resetear contraseña
290
291    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
292    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
293    @date 02-05-2017
294    @version 1.0.0
295    """
296
297    def __init__(self, *args, **kwargs):
298        super(PasswordResetForm, self).__init__(*args, **kwargs)
299        self.fields['email'].widget.attrs.update({'class': 'form-control',
300                                                  'placeholder': 'Correo'})
301
302    def clean(self):
303        cleaned_data = super(PasswordResetForm, self).clean()
304        email = cleaned_data.get("email")
305
306        if email:
307            msg = "Error no existe el email"
308            try:
309                User.objects.get(email=email)
310            except:
311                self.add_error('email', msg)
312               
313               
314
315class PasswordConfirmForm(SetPasswordForm):
316    """!
317    Formulario para confirmar la constraseña
318
319    @author Rodrigo Boet (rboet at cenditel.gob.ve)
320    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
321    @date 15-05-2017
322    @version 1.0.0
323    """
324    def __init__(self, *args, **kwargs):
325        super(PasswordConfirmForm, self).__init__(*args, **kwargs)
326        self.fields['new_password1'].widget.attrs.update({'class': 'form-control',
327                                                  'placeholder': 'Contraseña Nueva'})
328        self.fields['new_password2'].widget.attrs.update({'class': 'form-control',
329                                                  'placeholder': 'Repita su Contraseña'})
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.