source: consulta_publica/users/forms.py @ bf6bc0b

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

Agregada la permisología de roles al sistema

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