with update framework example create python django rest django-rest-framework camelcasing

python - update - extra kwargs django rest



datos POST de camelCase en el marco REST de Django (1)

Veo que hay un proyecto llamado djangorestframework-camel-case , que permite usar JavaScript-ish camelCase con los campos underscore_cased en los serializadores Django REST. Entonces, básicamente, puedo enviar:

{ "camelCase": "foo" }

Y recíbelo con el siguiente serializador:

class MySerializer(serializers.Serializer): session_id = serializers.CharField()

¿Existe algo similar para los datos POST? Entonces, ¿puedo enviar camelCase=foo través de POST y recibirlo en un campo underscore_case en mi serializador?

Intenté implementar mi propio analizador basado en FormParser:

class CamelCaseFormParser(FormParser): media_type = ''application/x-www-form-urlencoded'' def __init__(self): print("initialized") def parse(self, stream, media_type=None, parser_context=None): print("parse") ...

Y, después de agregarlo a DEFAULT_PARSER_CLASSES en settings.py, mientras que initialized está realmente impreso, el parse no lo está. Parece que, en el caso de los datos POST, application/x-www-form-urlencoded parser no se usa en absoluto.

Dado que los serializadores se usan así:

Serializer(data=request.data)

Estoy pensando en subclasificar el serializador y modificar los data antes de que se procese aún más, o incluso modificarlos antes de crear un serializador. Pero lo que estoy pidiendo es una forma más conveniente, que funciona para todos los serializadores, sin subclasificarlos.


¿por qué no quedarse con los analizadores?

from djangorestframework_camel_case.util import underscoreize from rest_framework import parsers from django.conf import settings from django.http import QueryDict class CamelCaseFormParser(parsers.FormParser): def parse(self, stream, media_type=None, parser_context=None): parser_context = parser_context or {} encoding = parser_context.get(''encoding'', settings.DEFAULT_CHARSET) data = QueryDict(stream.read(), encoding=encoding) return underscoreize(data)

simple, trabajando y correctamente colocado ...