2015-08-20 10 views
5

Ich sehe dort Projekt djangorestframework-camel-case genannt ist, die JavaScript-ish camelcase mit underscore_cased Feldern in Django REST Serializer zu verwenden. Also, im Grunde kann ich senden:camelcase POST-Daten in Django REST-Framework

{ 
    "camelCase": "foo" 
} 

Und erhalten sie mit Serializer folgende:

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

Hat etwas ähnliches für POST-Daten existieren? So kann ich camelCase=foo über POST senden und sie zu einem underscore_case Feld in meinem Serializer erhalten?

Ich habe versucht, meinen eigenen Parser basiert auf FormParser Umsetzung:

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

Und nachdem es zu DEFAULT_PARSER_CLASSES in settings.py Zugabe, während initialized tatsächlich gedruckt wird, ist parse nicht. So scheint es, im Fall von POST-Daten, application/x-www-form-urlencoded Parser werden nicht verwendet.

Da Serializer so verwendet:

Serializer(data=request.data) 

Ich denke über Serializer Subklassen und Modifizieren data, bevor es weiterverarbeitet wird, oder ändern sie, noch bevor ein Serializer zu schaffen. Aber, was ich fragen, ist ein bequemer Weg, für alle Serializer arbeiten, ohne sie zu Subklassen.

Antwort

3

warum klebt nicht mit Parsern?

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) 

einfach, zu arbeiten und richtig platziert ...