Ejemplo n.º 1
0
    def list(self, request):
        try:
            list_serializer_class = self.list_serializer_class
        except AttributeError:
            list_serializer_class = self.serializer_class
        serializer_context = {'request': request}

        try:
            queryset = self.get_queryset()
        except ValidationError:
            raise ApiValidationError(f'Invalid query parameters.')

        try:
            page = self.paginate_queryset(queryset)
        except FieldError:
            raise ApiValidationError(f'Invalid query parameters.')

        fields = request.query_params.get('fields', None)
        if fields is not None:
            fields = fields.split(',')

        serializer = list_serializer_class(page,
                                           context=serializer_context,
                                           many=True,
                                           fields=fields)
        return self.get_paginated_response(serializer.data)
Ejemplo n.º 2
0
    def post(self, *args, **kwargs):
        old_password = self.request.data.get('old_password')
        new_password = self.request.data.get('new_password')
        user = self.request.user
        if not user.check_password(old_password):
            raise ApiValidationError({'old_password': '******'})
        if not new_password:
            raise ApiValidationError({'new_password': '******'})
        try:
            validate_password(new_password)
        except ValidationError as error:
            raise ApiValidationError({'password': error.messages[0]})

        user.set_password(new_password)
        user.save()
        return Response({'message': 'New password set'})
Ejemplo n.º 3
0
 def update(self, instance, validated_data):
     """
     Surcharge la mise à jour de l'instance pour effectuer la validation complète
     :param instance: Instance à mettre à jour
     :param validated_data: Données validées
     :return: Instance mise à jour
     """
     m2m_data = {}
     for attr, value in validated_data.items():
         try:
             field = instance._meta.get_field(attr)
             if field.many_to_many:
                 m2m_data[attr] = value
                 continue
         except FieldDoesNotExist:
             continue
         setattr(instance, attr, value)
     try:
         instance.full_clean()
         instance.save()
         for attr, value in m2m_data.items():
             getattr(instance, attr).set(value)
     except ModelValidationError as error:
         raise ApiValidationError(error.messages)
     return instance
Ejemplo n.º 4
0
 def action_error(request, target, value):
     if value == '404':
         raise Http404()
     if value == '404_reason':
         raise Http404("something was removed")
     if value == 'perm':
         raise PermissionDenied("yo ain't doing that!")
     if value == 'invalid':
         raise ValidationError("invalid data here!")
     if value == 'api_invalid':
         raise ApiValidationError("invalid api data here!")
Ejemplo n.º 5
0
 def create(self, validated_data):
     groups = validated_data.pop('groups', [])
     permissions = validated_data.pop('user_permissions', [])
     is_superuser = validated_data.pop('is_superuser', False)
     password = validated_data.get('password', None)
     try:
         validate_password(password)
     except ModelValidationError as error:
         raise ApiValidationError({'password': error.messages})
     if is_superuser:
         user = User.objects.create_superuser(**validated_data)
     else:
         user = User.objects.create_user(**validated_data)
     user.groups.set(groups)
     user.user_permissions.set(permissions)
     return user
Ejemplo n.º 6
0
 def update(self, instance, validated_data):
     groups = validated_data.pop('groups', None) or instance.groups.all()
     permissions = validated_data.pop(
         'user_permissions', None) or instance.user_permissions.all()
     password = validated_data.pop('password', None)
     for attr, value in validated_data.items():
         setattr(instance, attr, value)
     if password:
         try:
             validate_password(password, user=instance)
         except ModelValidationError as error:
             raise ApiValidationError({'password': error.messages})
         instance.set_password(password)
     instance.save()
     instance.groups.set(groups)
     instance.user_permissions.set(permissions)
     return instance
Ejemplo n.º 7
0
 def create(self, validated_data):
     """
     Surcharge la création de l'instance pour effectuer la validation complète
     :param validated_data: Données validées
     :return: Instance créée
     """
     try:
         model = self.Meta.model
         model_field_names = [field.name for field in model._meta.fields]
         instance = model(
             **{
                 key: value
                 for key, value in validated_data.items()
                 if key in model_field_names
             })
         instance.full_clean()
     except ModelValidationError as error:
         raise ApiValidationError(error.messages)
     return super().create(validated_data)