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 ...