[pyar] [django] Rest framework

Juan Carizza juan.carizza en gmail.com
Vie Mayo 15 11:33:18 ART 2015


No hace falta que repitas la validación.

En la función `post` capturas la excepción.

class ViewSetFoo(ViewSet):
    def post( ... ):
        try:
            serializer.save()
        except django.forms.ValidationError:
            return Response(status_code=400, data=serializer.errors)


O tambien dentro del `save_obj` del serializador (no estoy seguro si es la
función save_obj):

class SerializerFor(serializers.ModelSerializer):
    def save_obj( ... ):
        try:
            obj.save()
        except django.form.ValidationError:
            raise serializers.ValidationError()


O de ultima DRF te permite implementar una clase que handlee todas las
exceptions [0]

[0]
http://www.django-rest-framework.org/api-guide/exceptions/#custom-exception-handling


El jue., 14 may. 2015 a las 19:08, Daniel (<dmlistapython en gmail.com>)
escribió:

> ok, era mas por un DRY que por convencimiento, pero repetiré la validacion
>
> El 14 de mayo de 2015, 18:55, Diego Fejgelis <diegofej en gmail.com>
> escribió:
>
>> El que te tira 500 es la view. Si queres mantener la validación *solo* en
>> el modelo, tenes que sobreescribir metodos de la view, no del serializador.
>> (posiblemente post() o mejor en el create()/update())
>>
>> Yo igualmente pondría un validate_cuit en el Serializer. El error creo
>> que debería ser antes de tratar de hacer el save.
>>
>>
>>
>> 2015-05-14 18:34 GMT-03:00 Daniel <dmlistapython en gmail.com>:
>>
>> claro, pero necesito repetir la validación en el serializador ¿no?
>>> lo que quería es capturar el error de validación del modelo.
>>>
>>> El 14 de mayo de 2015, 18:32, Diego Fejgelis <diegofej en gmail.com>
>>> escribió:
>>>
>>>> Podes hacer un validate_cuit(), de una manera muy parecida a "clean_"
>>>> en un form. [1]
>>>>
>>>> class ClienteSerializer(serializers.ModelSerializer):
>>>>     class Meta:
>>>>         model = Cliente
>>>>         fields = ('id', 'razon_social', 'cond_iva', 'direccion',
>>>> 'ciudad', 'cuit')
>>>>
>>>>     def validate_cuit(self, value):
>>>>         """
>>>>         Check valid CUIT
>>>>         """
>>>>         if cuit_valid(value):
>>>>             raise serializers.ValidationError("Invalid CUIT")
>>>>         return value
>>>>
>>>> ** Código sin probar
>>>>
>>>> [1]
>>>> http://www.django-rest-framework.org/api-guide/serializers/#validation
>>>>
>>>> 2015-05-14 18:28 GMT-03:00 Daniel <dmlistapython en gmail.com>:
>>>>
>>>>> Hola Gente,
>>>>>
>>>>> tengo este serializador:
>>>>>
>>>>> class ClienteSerializer(serializers.ModelSerializer):
>>>>>     class Meta:
>>>>>         model = Cliente
>>>>>         fields = ('id', 'razon_social', 'cond_iva', 'direccion',
>>>>> 'ciudad', 'cuit')
>>>>>
>>>>>
>>>>> resulta que el cuit (que sea válido) lo evalúo a nivel modelo, si
>>>>> envio un cuit invalido me genera una excepción.
>>>>>
>>>>> El problema es que la API me devuelve un error 500 con el error,
>>>>> ¿como capturo ese error desde el serializador y lo devuelvo como un
>>>>> 400 con un mensaje elegante?
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> pyar mailing list pyar en python.org.ar
>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>
>>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>>
>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>>> Argentina - http://www.usla.org.ar
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> pyar mailing list pyar en python.org.ar
>>>> http://listas.python.org.ar/listinfo/pyar
>>>>
>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>
>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>> Argentina - http://www.usla.org.ar
>>>>
>>>
>>>
>>>
>>> --
>>> Daniel Malisani
>>>
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>>
>>
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
>
> --
> Daniel Malisani
>  _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150515/28d99cdc/attachment.html>


More information about the pyar mailing list