source: consulta_publica/users/forms.py @ be8d917

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