serializers.py
1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from django.contrib.auth import password_validation
from rest_framework_json_api import serializers
from rest_framework.serializers import Serializer as DRFSerializer
from usuario.models import Usuario
class UsuarioSerializer(serializers.ModelSerializer):
permisos_usuario = serializers.SerializerMethodField()
class Meta:
model = Usuario
fields = (
'first_name',
'last_name',
'email',
'documento_identidad',
'permisos_usuario',
)
@staticmethod
def get_permisos_usuario(instance):
return instance.get_all_permissions()
included_serializers = {
'organismo': 'organismo.serializers.OrganismoSerializer',
}
class CambiarClaveSecretaSerializer(DRFSerializer):
clave = serializers.CharField(max_length=128, write_only=True, required=True)
clave_nueva = serializers.CharField(max_length=128, write_only=True, required=True)
clave_nueva_2 = serializers.CharField(max_length=128, write_only=True, required=True)
def validate_clave(self, value):
user = self.context['request'].user
if not user.check_password(value):
raise serializers.ValidationError("La contraseña anterior no es válida. ¡Intentalo nuevamente!")
return value
def validate(self, data):
if data['clave_nueva'] != data['clave_nueva_2']:
raise serializers.ValidationError({'clave_nueva_2': "Los nuevos campos de contraseñas no coinciden"})
password_validation.validate_password(data['clave_nueva'], self.context['request'].user)
return data
def save(self, **kwargs):
clave = self.validated_data['clave_nueva']
usuario = self.context['request'].user
usuario.set_password(clave)
usuario.save()
return usuario