2015-08-20 27 views
5

Django REST serileştiricilerindeki alt çizgi etiketli JavaScript-ish camelCase'i kullanmasına izin veren djangorestframework-camel-case adlı proje var.camelCase POST verileri Django REST Framework

{ 
    "camelCase": "foo" 
} 

Ve Serializer aşağıdaki ile alırsınız:: Yani, temel olarak, ben gönderebilir

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

POST verileri için benzer bir şey var mı? Bu yüzden POST aracılığıyla camelCase=foo gönderebilir ve diziselleştiricimde bir alt çizgi alanına alabilirim?

Ben FormParser dayalı kendi ayrıştırıcı uygulanması çalıştı: initialized aslında basılmış iken, settings.py içinde DEFAULT_PARSER_CLASSES eklemeden sonra,

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

Ve parse değildir. Öyle görünüyor ki, POST verisi durumunda, ayrıştırıcı kullanılmamaktadır. Serileştiriciler böyle kullanıldığından

:

Serializer(data=request.data) 

Ben Serializer sınıflara ve daha sonra işleme girmeden önce data değiştirerek, hatta bir Serializer oluşturmadan önce onu değiştirerek düşünüyorum. Ama sorduğum şey, tüm Serializer'lar için alt sınıflara ayırmadan çalışmak için daha uygun bir yol.

cevap

3

neden parserlerle yapışmıyorsunuz?

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) 
çalışma

basit ve düzgün yerleştirilmiş ...

İlgili konular