Conjunto 1ac8063 en gestor_consulta
- Fecha y hora:
- 19/09/2017 15:50:28 (hace 7 años)
- Branches:
- master
- Children:
- 6211c29
- Parents:
- d9619ca (diferencia), 4400fb8 (diferencia)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Ficheros:
-
- 1 borrado
- 10 editados
Leyenda
- No modificado
- Añadido
- Eliminado
-
.gitignore
rd7b19bc r1ac8063 1 1 *.pyc 2 2 *.py~ 3 *.sq ulite33 *.sqlite3 4 4 migrations 5 5 migrations/* 6 6 static/procesamiento_files/* 7 db.sqlite3 -
base/fields.py
rd7b19bc rd9619ca 16 16 17 17 from django.forms import MultiValueField, ChoiceField, CharField 18 19 from rest_framework import serializers 18 20 19 21 from .constant import SHORT_NACIONALIDAD … … 57 59 return ''.join(data_list) 58 60 return '' 61 62 class CedulaRestField(serializers.Field): 63 def to_representation(self, obj): 64 return "some here" 65 66 def to_representation(self, obj): 67 """ 68 Serialize the object's class name. 69 """ 70 return obj.__class__.__name__ -
gestor_consulta/settings.py
rfecfc90 r38840b5 169 169 'rest_framework.authentication.SessionAuthentication', 170 170 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 171 171 172 ), 172 173 } -
gestor_consulta/urls.py
rfecfc90 r4400fb8 17 17 from django.contrib import admin 18 18 from rest.routers import router 19 from rest_framework_jwt.views import obtain_jwt_token 20 from rest_framework_jwt.views import refresh_jwt_token 19 from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token 20 21 21 22 22 urlpatterns = [ -
requirements.txt
rabd93af re81243a 1 1 Django==1.11.2 2 2 Pillow==4.1.1 3 PyJWT==1.5.2 4 argparse==1.2.1 5 codegen==1.0 6 dateutils==0.6.6 3 7 django-filter==1.0.4 8 django-rest-framework-braces==0.2.2 4 9 django-simple-captcha==0.5.5 5 10 djangorestframework==3.6.3 11 djangorestframework-jwt==1.11.0 6 12 olefile==0.44 13 patterns==0.3 14 python-dateutil==2.6.1 7 15 pytz==2017.2 8 16 six==1.10.0 17 wsgiref==0.1.2 -
rest/routers.py
rd9619ca r1ac8063 8 8 # 9 9 # Routers de los viewset de la aplicaciones rest 10 # @author Antonio Araujo (aaraujo at cenditel.gob.ve) 11 # @author Argenis Osorio (aosorio at cenditel.gob.ve) 10 12 # @author Rodrigo Boet (rboet at cenditel.gob.ve) 11 13 # @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en TecnologÃas Libres -
users/forms.py
rd7b19bc r1ac8063 33 33 from captcha.fields import CaptchaField 34 34 35 from django.core.validators import RegexValidator 35 36 36 37 class LoginForm(forms.Form): … … 45 46 ## Campo de la constraseña 46 47 contrasena = CharField() 47 48 48 49 ## Nombre del usuario 49 50 usuario = CharField() 50 51 51 52 ## Formulario de recordarme 52 53 remember_me = BooleanField() … … 58 59 """! 59 60 Metodo que sobreescribe cuando se inicializa el formulario 60 61 61 62 @author Rodrigo Boet (rboet at cenditel.gob.ve) 62 63 @copyright GNU/GPLv2 … … 78 79 self.fields['captcha'].label = "Captcha" 79 80 self.fields['captcha'].widget.attrs.update({'class': 'validate'}) 80 81 81 82 def clean(self): 82 83 """! 83 84 Método que valida si el usuario a autenticar es valido 84 85 85 86 @author Rodrigo Boet (rboet at cenditel.gob.ve) 86 87 @copyright GNU/GPLv2 … … 95 96 msg = "Verifique su usuario o contraseña" 96 97 self.add_error('usuario', msg) 97 98 98 99 class Meta: 99 100 fields = ('usuario', 'contrasena', 'remember_me') … … 112 113 """! 113 114 Metodo que sobreescribe cuando se inicializa el formulario 114 115 115 116 @author Rodrigo Boet (rboet at cenditel.gob.ve) 116 117 @copyright GNU/GPLv2 … … 122 123 """ 123 124 super(UserRegisterForm, self).__init__(*args, **kwargs) 124 125 125 126 # Si se ha seleccionado un estado establece el listado de municipios y elimina el atributo disable 126 127 if 'estado' in self.data and self.data['estado']: … … 132 133 self.fields['parroquia'].widget.attrs.pop('disabled') 133 134 self.fields['parroquia'].queryset=Parroquia.objects.filter(municipio=self.data['municipio']) 134 135 135 136 self.fields['estado'].choices = cargar_entidad() 136 137 self.fields['municipio'].choices = cargar_municipios() 137 138 self.fields['parroquia'].choices = cargar_parroquias() 138 139 140 139 141 ## Nombre de usuario 140 142 username = forms.CharField(max_length=30, … … 142 144 label="Nombre de Usuario" 143 145 ) 144 146 145 147 ## Contraseña 146 148 password = forms.CharField(max_length=20, … … 148 150 label="Constraseña" 149 151 ) 150 152 151 153 ## Repita la Contraseña 152 154 password_repeat = forms.CharField(max_length=20, … … 154 156 label="Repita su constraseña" 155 157 ) 156 158 157 159 ## nombre 158 160 nombre = forms.CharField(max_length=100, … … 160 162 label="Nombre" 161 163 ) 162 164 163 165 ## apellido 164 166 apellido = forms.CharField(max_length=100, … … 166 168 label="Apellido" 167 169 ) 168 170 169 171 ## correo 170 172 email = forms.EmailField( … … 172 174 label="Correo" 173 175 ) 174 176 175 177 ## cedula 176 178 cedula = CedulaField() 177 179 178 180 ## estado 179 181 estado = forms.ChoiceField(widget=forms.Select(attrs={ 180 182 'onchange': "actualizar_combo(this.value,'base','Municipio','entidad','codigo','nombre','id_municipio');$('select').material_select();"})) 181 183 182 184 ## municipio 183 185 municipio = forms.ChoiceField(widget=forms.Select(attrs={'disabled':'disabled', 184 186 'onchange': "actualizar_combo(this.value,'base','Parroquia','municipio','codigo','nombre','id_parroquia');$('select').material_select();"})) 185 187 186 188 ## parroquia 187 189 parroquia = forms.ChoiceField(widget=forms.Select(attrs={'disabled':'disabled'})) … … 189 191 ## Campo del captcha 190 192 captcha = CaptchaField() 191 193 192 194 def clean_password_repeat(self): 193 195 """! 194 196 Método que valida si las contraseñas coinciden 195 197 196 198 @author Rodrigo Boet (rboet at cenditel.gob.ve) 197 199 @copyright GNU/GPLv2 … … 205 207 raise forms.ValidationError("La contraseña no coincide") 206 208 return password_repeat 207 209 208 210 def clean_cedula(self): 209 211 """! 210 212 Método que valida si la cedula es única 211 213 212 214 @author Rodrigo Boet (rboet at cenditel.gob.ve) 213 215 @copyright GNU/GPLv2 … … 220 222 raise forms.ValidationError("La cédula ingresada ya existe") 221 223 return cedula 222 224 223 225 def clean_email(self): 224 226 """! 225 227 Método que valida si el correo es única 226 228 227 229 @author Rodrigo Boet (rboet at cenditel.gob.ve) 228 230 @copyright GNU/GPLv2 … … 235 237 raise forms.ValidationError("El correo ingresado ya existe") 236 238 return email 237 239 238 240 class Meta: 239 241 model = User 240 242 exclude = ['is_staff','is_active','date_joined'] 241 243 242 244 class PerfilForm(forms.ModelForm): 243 245 """! … … 252 254 """! 253 255 Metodo que sobreescribe cuando se inicializa el formulario 254 256 255 257 @author Rodrigo Boet (rboet at cenditel.gob.ve) 256 258 @copyright GNU/GPLv2 … … 262 264 """ 263 265 super(PerfilForm, self).__init__(*args, **kwargs) 264 266 265 267 self.fields['estado'].choices = cargar_entidad() 266 268 self.fields['municipio'].choices = cargar_municipios() 267 269 self.fields['parroquia'].choices = cargar_parroquias() 268 270 269 271 ## cedula 270 272 cedula = CedulaField() 271 273 272 274 ## estado 273 275 estado = forms.ChoiceField(widget=forms.Select(attrs={ 274 276 'onchange': "actualizar_combo(this.value,'base','Municipio','entidad','codigo','nombre','id_municipio');$('select').material_select();"})) 275 277 276 278 ## municipio 277 279 municipio = forms.ChoiceField(widget=forms.Select(attrs={ 278 280 'onchange': "actualizar_combo(this.value,'base','Parroquia','municipio','codigo','nombre','id_parroquia');$('select').material_select();"})) 279 281 280 282 ## parroquia 281 283 parroquia = forms.ChoiceField(widget=forms.Select()) 282 284 283 285 class Meta: 284 286 model = Perfil 285 287 exclude = ['user','parroquia'] 286 287 288 289 288 290 class PasswordResetForm(PasswordResetForm): 289 291 """! … … 311 313 except: 312 314 self.add_error('email', msg) 313 314 315 316 315 317 316 318 class PasswordConfirmForm(SetPasswordForm): … … 329 331 self.fields['new_password2'].widget.attrs.update({'class': 'input-field', 330 332 'placeholder': 'Repita su Contraseña'}) 333 334 class UserForm(forms.Form): 335 """! 336 Formulario de Registro para la API 337 338 @author Antonio Araujo (aaraujo at cenditel.gob.ve) 339 @author Rodrigo Boet (rboet at cenditel.gob.ve) 340 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 341 @date 19-09-2017 342 @version 1.0.0 343 """ 344 345 ## Nombre de usuario 346 username = forms.CharField(max_length=30, 347 widget=forms.TextInput(), 348 label="Nombre de Usuario" 349 ) 350 351 ## Contraseña 352 password = forms.CharField(max_length=20, 353 widget=forms.TextInput(attrs={'type':'password'}), 354 label="Constraseña" 355 ) 356 357 ## Repita la Contraseña 358 password_repeat = forms.CharField(max_length=20, 359 widget=forms.TextInput(attrs={'type':'password'}), 360 label="Repita su constraseña" 361 ) 362 363 ## nombre 364 nombre = forms.CharField(max_length=100, 365 widget=forms.TextInput(), 366 label="Nombre" 367 ) 368 369 ## apellido 370 apellido = forms.CharField(max_length=100, 371 widget=forms.TextInput(), 372 label="Apellido" 373 ) 374 375 ## correo 376 email = forms.EmailField( 377 widget=forms.TextInput(), 378 label="Correo" 379 ) 380 381 cedula = forms.CharField(max_length=9, 382 validators=[RegexValidator( 383 regex='^[V|E][0-9]{7,8}', 384 message='La cédula no está en el formato indicado' 385 )], 386 label="Cedula" 387 ) 388 389 # validations 390 def clean_password_repeat(self): 391 """! 392 Método que valida si las contraseñas coinciden 393 394 @author Rodrigo Boet (rboet at cenditel.gob.ve) 395 @copyright GNU/GPLv2 396 @date 01-03-2017 397 @param self <b>{object}</b> Objeto que instancia la clase 398 @return Retorna el campo con la validacion 399 """ 400 print("******clean_password_repeat") 401 password = self.cleaned_data['password'] 402 password_repeat = self.cleaned_data['password_repeat'] 403 if(password_repeat!=password): 404 raise forms.ValidationError("La contraseña no coincide") 405 return password_repeat 406 407 def clean_cedula(self): 408 """! 409 Método que valida si la cedula es única 410 411 @author Rodrigo Boet (rboet at cenditel.gob.ve) 412 @copyright GNU/GPLv2 413 @date 01-03-2017 414 @param self <b>{object}</b> Objeto que instancia la clase 415 @return Retorna el campo con la validacion 416 """ 417 cedula = self.cleaned_data['cedula'] 418 if(validate_cedula(cedula)): 419 raise forms.ValidationError("La cédula ingresada ya existe") 420 return cedula 421 422 def clean_email(self): 423 """! 424 Método que valida si el correo es única 425 426 @author Rodrigo Boet (rboet at cenditel.gob.ve) 427 @copyright GNU/GPLv2 428 @date 01-03-2017 429 @param self <b>{object}</b> Objeto que instancia la clase 430 @return Retorna el campo con la validacion 431 """ 432 email = self.cleaned_data['email'] 433 if(validate_email(email)): 434 raise forms.ValidationError("El correo ingresado ya existe") 435 return email 436 437 438 def validate(self, data): 439 print(data) 440 return data -
users/rest.py
rd9619ca r1ac8063 1 # -*- coding: utf-8 -*- 1 2 """ 2 3 Sistema de Consulta Pública … … 4 5 Copyleft (@) 2017 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/wiki/ModeladoTopicos_2017 5 6 """ 7 6 8 ## @package user.rest 7 9 # 8 10 # ViewSet (vistas de los rest) para el rest framework 9 11 # @author Rodrigo Boet (rboet at cenditel.gob.ve) 12 # @author Antonio Araujo (aaraujo at cenditel.gob.ve) 10 13 # @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en TecnologÃas Libres 11 14 # (CENDITEL) nodo Mérida - Venezuela</a> 12 15 # @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 13 16 # @version 1.0 14 from .serializers import MySerializer 17 from users.models import Perfil 18 from .serializers import PerfilSerializer, RegistroSerializer 19 15 20 from rest_framework import viewsets 16 21 from rest_framework.response import Response … … 24 29 25 30 @author Rodrigo Boet (rboet at cenditel.gob.ve) 26 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 31 @author Antonio Araujo (aaraujo at cenditel.gob.ve) 32 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU 33 Public License versión 2 (GPLv2)</a> 27 34 @date 20-06-2017 28 35 @version 1.0.0 29 36 """ 30 serializer_class = MySerializer 31 37 serializer_class = RegistroSerializer 38 queryset = Perfil.objects.all() 39 32 40 def create(self, request): 33 serializer = MySerializer(data=request.data) 41 """! 42 Método que registra los datos del formulario 43 44 @author Antonio Araujo (aaraujo at cenditel.gob.ve) 45 @author Rodrigo Boet (rboet at cenditel.gob.ve) 46 @copyright GNU/GPLv2 47 @date 19-09-2017 48 @param self <b>{object}</b> Objeto que instancia la clase 49 @return Retorna la respuesta con los datos 50 """ 51 serializer = RegistroSerializer(data=request.data) 34 52 if serializer.is_valid(): 35 53 serializer.save() 36 54 return Response(serializer.data, status=status.HTTP_201_CREATED) 37 55 return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 56 57 def list(self, request): 58 """! 59 Método que retorna la lista de los perfiles 60 61 @author Rodrigo Boet (rboet at cenditel.gob.ve) 62 @copyright GNU/GPLv2 63 @date 19-09-2017 64 @param self <b>{object}</b> Objeto que instancia la clase 65 @return Retorna los datos de los perfiles 66 """ 67 serializer = PerfilSerializer(self.queryset, many=True) 68 return Response(serializer.data) -
users/serializers.py
rd9619ca r1ac8063 1 1 # -*- coding: utf-8 -*- 2 """ 3 Sistema de Consulta Pública 4 5 Copyleft (@) 2017 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/wiki/ModeladoTopicos_2017 6 """ 7 ## @package user.serializers 8 # 9 # Serializadores de los modelos de usuario para el rest framework 10 # @author Antonio Araujo (aaraujo 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 2 15 from django import forms 3 16 from rest_framework import serializers … … 9 22 validate_cedula, validate_email 10 23 ) 24 from .forms import UserForm 25 from .models import Perfil 26 from drf_braces.serializers.form_serializer import FormSerializer 11 27 12 28 … … 15 31 Metodo que permite serializar el modelo User 16 32 17 @author A rgenis Osorio (aosorio at cenditel.gob.ve)33 @author Antonio Araujo (aaraujo at cenditel.gob.ve) 18 34 @copyright GNU/GPLv2 19 @date 17-08-201735 @date 31-08-2017 20 36 @param serializers.HyperlinkedModelSerializer <b>{object}</b> Objeto del serializer 21 37 @return Retorna los datos de contexto … … 24 40 class Meta: 25 41 model = User 26 fields = (' id', 'username', 'email',)42 fields = ('username', 'first_name', 'last_name', 'email') 27 43 44 class PerfilSerializer(serializers.ModelSerializer): 45 """! 46 Metodo que permite serializar el modelo Perfil 28 47 29 class UserForm(forms.Form): 30 ## Nombre de usuario 31 username = forms.CharField(max_length=30, 32 widget=forms.TextInput(), 33 label="Nombre de Usuario" 34 ) 35 36 ## Contraseña 37 password = forms.CharField(max_length=20, 38 widget=forms.TextInput(attrs={'type':'password'}), 39 label="Constraseña" 40 ) 41 42 ## Repita la Contraseña 43 password_repeat = forms.CharField(max_length=20, 44 widget=forms.TextInput(attrs={'type':'password'}), 45 label="Repita su constraseña" 46 ) 47 48 ## nombre 49 nombre = forms.CharField(max_length=100, 50 widget=forms.TextInput(), 51 label="Nombre" 52 ) 53 54 ## apellido 55 apellido = forms.CharField(max_length=100, 56 widget=forms.TextInput(), 57 label="Apellido" 58 ) 59 60 ## correo 61 email = forms.EmailField( 62 widget=forms.TextInput(), 63 label="Correo" 64 ) 65 66 ## cedula 67 68 def clean_password_repeat(self): 69 """! 70 Método que valida si las contraseñas coinciden 71 72 @author Rodrigo Boet (rboet at cenditel.gob.ve) 73 @copyright GNU/GPLv2 74 @date 01-03-2017 75 @param self <b>{object}</b> Objeto que instancia la clase 76 @return Retorna el campo con la validacion 77 """ 78 password = self.cleaned_data['password'] 79 password_repeat = self.cleaned_data['password_repeat'] 80 if(password_repeat!=password): 81 raise forms.ValidationError("La contraseña no coincide") 82 return password_repeat 83 84 def clean_cedula(self): 85 """! 86 Método que valida si la cedula es única 87 88 @author Rodrigo Boet (rboet at cenditel.gob.ve) 89 @copyright GNU/GPLv2 90 @date 01-03-2017 91 @param self <b>{object}</b> Objeto que instancia la clase 92 @return Retorna el campo con la validacion 93 """ 94 cedula = self.cleaned_data['cedula'] 95 if(validate_cedula(cedula)): 96 raise forms.ValidationError("La cédula ingresada ya existe") 97 return cedula 98 99 def clean_email(self): 100 """! 101 Método que valida si el correo es única 102 103 @author Rodrigo Boet (rboet at cenditel.gob.ve) 104 @copyright GNU/GPLv2 105 @date 01-03-2017 106 @param self <b>{object}</b> Objeto que instancia la clase 107 @return Retorna el campo con la validacion 108 """ 109 email = self.cleaned_data['email'] 110 if(validate_email(email)): 111 raise forms.ValidationError("El correo ingresado ya existe") 112 return email 113 48 @author Antonio Araujo (aaraujo at cenditel.gob.ve) 49 @copyright GNU/GPLv2 50 @date 31-08-2017 51 @param serializers.HyperlinkedModelSerializer <b>{object}</b> Objeto del serializer 52 @return Retorna los datos de contexto 53 """ 54 user = UserSerializer(read_only=True) 114 55 115 class MySerializer(FormSerializer): 56 class Meta: 57 model = Perfil 58 fields = ('cedula', 'parroquia', 'user') 59 60 class RegistroSerializer(FormSerializer): 61 """! 62 Clase serializador de registro de usuario 63 64 @author Antonio Araujo (aaraujo at cenditel.gob.ve) 65 @copyright GNU/GPLv2 66 @date 19-09-2017 67 @param serializers.HyperlinkedModelSerializer <b>{object}</b> Objeto del serializer 68 @return Retorna los datos de contexto 69 """ 116 70 class Meta(object): 117 form = UserForm71 form = UserForm -
users/urls.py
r2353277 r1ac8063 38 38 {'template_name': 'user.passwordreset.end.html'}, 39 39 name='reset_end'), 40 ##### Probando los filtros del API REST #######41 url(r'^users/$', views.UsersList.as_view()),42 url(r'^users/(?P<pk>[0-9]+)/$', views.UserDetail.as_view()),43 40 ]
Nota: Vea TracChangeset
para ayuda en el uso del visor de conjuntos de cambios.