Conjunto 1ac8063 en gestor_consulta


Ignorar:
Fecha y hora:
19/09/2017 15:50:28 (hace 7 años)
Autor:
rudmanmrrod <rudman22@…>
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.
Mensaje:

Mezclados los cambios

Ficheros:
1 borrado
10 editados

Leyenda

No modificado
Añadido
Eliminado
  • .gitignore

    rd7b19bc r1ac8063  
    11*.pyc
    22*.py~
    3 *.squlite3
     3*.sqlite3
    44migrations
    55migrations/*
    66static/procesamiento_files/*
     7db.sqlite3
  • base/fields.py

    rd7b19bc rd9619ca  
    1616
    1717from django.forms import MultiValueField, ChoiceField, CharField
     18
     19from rest_framework import serializers
    1820
    1921from .constant import SHORT_NACIONALIDAD
     
    5759            return ''.join(data_list)
    5860        return ''
     61   
     62class 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  
    169169        'rest_framework.authentication.SessionAuthentication',
    170170        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
     171
    171172    ),
    172173}
  • gestor_consulta/urls.py

    rfecfc90 r4400fb8  
    1717from django.contrib import admin
    1818from rest.routers import router
    19 from rest_framework_jwt.views import obtain_jwt_token
    20 from rest_framework_jwt.views import refresh_jwt_token
     19from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token
     20
    2121
    2222urlpatterns = [
  • requirements.txt

    rabd93af re81243a  
    11Django==1.11.2
    22Pillow==4.1.1
     3PyJWT==1.5.2
     4argparse==1.2.1
     5codegen==1.0
     6dateutils==0.6.6
    37django-filter==1.0.4
     8django-rest-framework-braces==0.2.2
    49django-simple-captcha==0.5.5
    510djangorestframework==3.6.3
     11djangorestframework-jwt==1.11.0
    612olefile==0.44
     13patterns==0.3
     14python-dateutil==2.6.1
    715pytz==2017.2
    816six==1.10.0
     17wsgiref==0.1.2
  • rest/routers.py

    rd9619ca r1ac8063  
    88#
    99# 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)
    1012# @author Rodrigo Boet (rboet at cenditel.gob.ve)
    1113# @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres
  • users/forms.py

    rd7b19bc r1ac8063  
    3333from captcha.fields import CaptchaField
    3434
     35from django.core.validators import RegexValidator
    3536
    3637class LoginForm(forms.Form):
     
    4546    ## Campo de la constraseña
    4647    contrasena = CharField()
    47    
     48
    4849    ## Nombre del usuario
    4950    usuario = CharField()
    50    
     51
    5152    ## Formulario de recordarme
    5253    remember_me = BooleanField()
     
    5859        """!
    5960        Metodo que sobreescribe cuando se inicializa el formulario
    60    
     61
    6162        @author Rodrigo Boet (rboet at cenditel.gob.ve)
    6263        @copyright GNU/GPLv2
     
    7879        self.fields['captcha'].label = "Captcha"
    7980        self.fields['captcha'].widget.attrs.update({'class': 'validate'})
    80        
     81
    8182    def clean(self):
    8283        """!
    8384        Método que valida si el usuario a autenticar es valido
    84    
     85
    8586        @author Rodrigo Boet (rboet at cenditel.gob.ve)
    8687        @copyright GNU/GPLv2
     
    9596            msg = "Verifique su usuario o contraseña"
    9697            self.add_error('usuario', msg)
    97        
     98
    9899    class Meta:
    99100        fields = ('usuario', 'contrasena', 'remember_me')
     
    112113        """!
    113114        Metodo que sobreescribe cuando se inicializa el formulario
    114    
     115
    115116        @author Rodrigo Boet (rboet at cenditel.gob.ve)
    116117        @copyright GNU/GPLv2
     
    122123        """
    123124        super(UserRegisterForm, self).__init__(*args, **kwargs)
    124        
     125
    125126        # Si se ha seleccionado un estado establece el listado de municipios y elimina el atributo disable
    126127        if 'estado' in self.data and self.data['estado']:
     
    132133                self.fields['parroquia'].widget.attrs.pop('disabled')
    133134                self.fields['parroquia'].queryset=Parroquia.objects.filter(municipio=self.data['municipio'])
    134        
     135
    135136        self.fields['estado'].choices = cargar_entidad()
    136137        self.fields['municipio'].choices = cargar_municipios()
    137138        self.fields['parroquia'].choices = cargar_parroquias()
    138    
     139
     140
    139141    ## Nombre de usuario
    140142    username = forms.CharField(max_length=30,
     
    142144        label="Nombre de Usuario"
    143145        )
    144    
     146
    145147    ## Contraseña
    146148    password = forms.CharField(max_length=20,
     
    148150        label="Constraseña"
    149151        )
    150    
     152
    151153    ## Repita la Contraseña
    152154    password_repeat = forms.CharField(max_length=20,
     
    154156        label="Repita su constraseña"
    155157        )
    156    
     158
    157159    ## nombre
    158160    nombre = forms.CharField(max_length=100,
     
    160162        label="Nombre"
    161163        )
    162    
     164
    163165    ## apellido
    164166    apellido = forms.CharField(max_length=100,
     
    166168        label="Apellido"
    167169        )
    168    
     170
    169171    ## correo
    170172    email = forms.EmailField(
     
    172174        label="Correo"
    173175        )
    174    
     176
    175177    ## cedula
    176178    cedula = CedulaField()
    177    
     179
    178180    ## estado
    179181    estado = forms.ChoiceField(widget=forms.Select(attrs={
    180182        'onchange': "actualizar_combo(this.value,'base','Municipio','entidad','codigo','nombre','id_municipio');$('select').material_select();"}))
    181    
     183
    182184    ## municipio
    183185    municipio = forms.ChoiceField(widget=forms.Select(attrs={'disabled':'disabled',
    184186        'onchange': "actualizar_combo(this.value,'base','Parroquia','municipio','codigo','nombre','id_parroquia');$('select').material_select();"}))
    185    
     187
    186188    ## parroquia
    187189    parroquia = forms.ChoiceField(widget=forms.Select(attrs={'disabled':'disabled'}))
     
    189191    ## Campo del captcha
    190192    captcha = CaptchaField()
    191    
     193
    192194    def clean_password_repeat(self):
    193195        """!
    194196        Método que valida si las contraseñas coinciden
    195    
     197
    196198        @author Rodrigo Boet (rboet at cenditel.gob.ve)
    197199        @copyright GNU/GPLv2
     
    205207            raise forms.ValidationError("La contraseña no coincide")
    206208        return password_repeat
    207    
     209
    208210    def clean_cedula(self):
    209211        """!
    210212        Método que valida si la cedula es única
    211    
     213
    212214        @author Rodrigo Boet (rboet at cenditel.gob.ve)
    213215        @copyright GNU/GPLv2
     
    220222            raise forms.ValidationError("La cédula ingresada ya existe")
    221223        return cedula
    222    
     224
    223225    def clean_email(self):
    224226        """!
    225227        Método que valida si el correo es única
    226    
     228
    227229        @author Rodrigo Boet (rboet at cenditel.gob.ve)
    228230        @copyright GNU/GPLv2
     
    235237            raise forms.ValidationError("El correo ingresado ya existe")
    236238        return email
    237        
     239
    238240    class Meta:
    239241        model = User
    240242        exclude = ['is_staff','is_active','date_joined']
    241        
     243
    242244class PerfilForm(forms.ModelForm):
    243245    """!
     
    252254        """!
    253255        Metodo que sobreescribe cuando se inicializa el formulario
    254    
     256
    255257        @author Rodrigo Boet (rboet at cenditel.gob.ve)
    256258        @copyright GNU/GPLv2
     
    262264        """
    263265        super(PerfilForm, self).__init__(*args, **kwargs)
    264        
     266
    265267        self.fields['estado'].choices = cargar_entidad()
    266268        self.fields['municipio'].choices = cargar_municipios()
    267269        self.fields['parroquia'].choices = cargar_parroquias()
    268    
     270
    269271    ## cedula
    270272    cedula = CedulaField()
    271    
     273
    272274    ## estado
    273275    estado = forms.ChoiceField(widget=forms.Select(attrs={
    274276        'onchange': "actualizar_combo(this.value,'base','Municipio','entidad','codigo','nombre','id_municipio');$('select').material_select();"}))
    275    
     277
    276278    ## municipio
    277279    municipio = forms.ChoiceField(widget=forms.Select(attrs={
    278280        'onchange': "actualizar_combo(this.value,'base','Parroquia','municipio','codigo','nombre','id_parroquia');$('select').material_select();"}))
    279    
     281
    280282    ## parroquia
    281283    parroquia = forms.ChoiceField(widget=forms.Select())
    282    
     284
    283285    class Meta:
    284286        model = Perfil
    285287        exclude = ['user','parroquia']
    286        
    287        
     288
     289
    288290class PasswordResetForm(PasswordResetForm):
    289291    """!
     
    311313            except:
    312314                self.add_error('email', msg)
    313                
    314                
     315
     316
    315317
    316318class PasswordConfirmForm(SetPasswordForm):
     
    329331        self.fields['new_password2'].widget.attrs.update({'class': 'input-field',
    330332                                                  'placeholder': 'Repita su Contraseña'})
     333
     334class 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 -*-
    12"""
    23Sistema de Consulta Pública
     
    45Copyleft (@) 2017 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/wiki/ModeladoTopicos_2017
    56"""
     7
    68## @package user.rest
    79#
    810# ViewSet (vistas de los rest) para el rest framework
    911# @author Rodrigo Boet (rboet at cenditel.gob.ve)
     12# @author Antonio Araujo (aaraujo at cenditel.gob.ve)
    1013# @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres
    1114# (CENDITEL) nodo Mérida - Venezuela</a>
    1215# @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    1316# @version 1.0
    14 from .serializers import MySerializer
     17from users.models import Perfil
     18from .serializers import PerfilSerializer, RegistroSerializer
     19
    1520from rest_framework import viewsets
    1621from rest_framework.response import Response
     
    2429
    2530    @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>
    2734    @date 20-06-2017
    2835    @version 1.0.0
    2936    """
    30     serializer_class = MySerializer
    31    
     37    serializer_class = RegistroSerializer
     38    queryset = Perfil.objects.all()
     39
    3240    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)
    3452        if serializer.is_valid():
    3553            serializer.save()
    3654            return Response(serializer.data, status=status.HTTP_201_CREATED)
    3755        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  
    11# -*- 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 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
    215from django import forms
    316from rest_framework import serializers
     
    922    validate_cedula, validate_email
    1023    )
     24from .forms import UserForm
     25from .models import Perfil
     26from drf_braces.serializers.form_serializer import FormSerializer
    1127
    1228
     
    1531    Metodo que permite serializar el modelo User
    1632
    17     @author Argenis Osorio (aosorio at cenditel.gob.ve)
     33    @author Antonio Araujo (aaraujo at cenditel.gob.ve)
    1834    @copyright GNU/GPLv2
    19     @date 17-08-2017
     35    @date 31-08-2017
    2036    @param serializers.HyperlinkedModelSerializer <b>{object}</b> Objeto del serializer
    2137    @return Retorna los datos de contexto
     
    2440    class Meta:
    2541        model = User
    26         fields = ('id', 'username', 'email',)
     42        fields = ('username', 'first_name', 'last_name', 'email')
    2743
     44class PerfilSerializer(serializers.ModelSerializer):
     45    """!
     46    Metodo que permite serializar el modelo Perfil
    2847
    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)
    11455
    115 class MySerializer(FormSerializer):
     56    class Meta:
     57        model = Perfil
     58        fields = ('cedula', 'parroquia', 'user')
     59
     60class 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    """
    11670    class Meta(object):
    117         form = UserForm
     71            form = UserForm
  • users/urls.py

    r2353277 r1ac8063  
    3838        {'template_name': 'user.passwordreset.end.html'},
    3939        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()),
    4340]
Nota: Vea TracChangeset para ayuda en el uso del visor de conjuntos de cambios.