2010-06-16 8 views
4

장고 기반 웹 서비스에서 일하고 있는데 직렬화를 수행하는 가장 좋은 방법이 무엇인지 알아 내려고하고 있습니다.장고 : 사용자 지정 직렬화 옵션?

그러나 까다로운 요구 사항은 응답의 형식과 필드에 대한 완전한 제어권을 갖고 싶다는 것입니다.

예를 들어 Django 시리얼 라이저 (wadofstuff serializer 포함)는 { model: "app.Model", pk: 42, fields: { ... }}의 필드를 자동으로 감싸는 것으로 조명기를 만드는 데 적합하지만 나에게 좋지는 않습니다. 출력을 완벽하게 제어하고 싶습니다. .

또한 장고의 객체를 인식하는 serializer를 사용하고 싶습니다. 예를 들어 QuerySet 또는 ManyToManyField으로 올바른 작업을 수행 할 수 있습니다.

현재 장고 - 피스톤의 emitters.py을 사용하려고 생각하지만 장고 - 피스톤에 대한 나의 경험은 평범한 것일 뿐이므로 다른 옵션이 있는지 알고 싶습니다.

그래서 사용자 정의 가능한 장고 시리얼 라이저를위한 다른 옵션이 있습니까?

ª : 드문 드문 문서이며 테스트 중이며 serializer에 몇 가지 문제가 있습니다.

+0

아, 그래 : 형식. 결과를 AMF로 인코딩하여 Flash 클라이언트로 전송하므로 직렬 기가 기본 유형 (사전, 숫자, 문자열 등)으로 만 구성된 데이터 구조를 생성해야합니다. –

답변

1

장고 피스톤을 보았습니까? 이 작업을 쉽게하기 위해서는 많은 자료가 있어야합니다.

(특히 직렬화 확실하지만, 장고 RESTy하지 웹 서비스를 제공합니다.)

+0

질문을 읽는 방법, djc;) 그렇습니다. 장고 피스톤을 살펴 봤는데, 그 시리얼 라이저를 사용하게 될지도 모릅니다. 나는 모든 것을 아직 사용하고 싶지 않은지 잘 모르겠다. 왜냐하면 나는 평범한 경험을했고 Flash에 데이터를 보내고 있기 때문이다 (PyAMF가 훨씬 더 좋은 일을한다) ...하지만 물론, 그것은 모두 바뀔 수도 있습니다 : P –

+0

죄송합니다, 죄송합니다! – djc

1

정말 빠른 일부 사용자 지정 직렬화를 필요로하고 내 경우는 그냥 내가 원하는 모든 형식을 만들 수 있습니다 장고 템플릿을 쓰기 직렬화를 필요로하지 않는 경우 목록/쿼리 세트/개체에서. 그런 다음 적절한 컨텍스트를 사용하여 render_to_string을 호출하면 데이터가 일련 화됩니다.

UPDATE :

이의 당신이 datatables.net plugin에 의해 허용 JSON 포맷을 취득하고 싶은 말은하자 몇 가지 간단한 예제. simplejson이나 sth를 사용하는 queryset을 직렬화하는 데 필요한 몇 가지 특별한 매개 변수가 있기 때문에 여기에서는 불가능합니다 (또는 적어도 그렇게 쉬운 것은 아닙니다).

{ 
    "sEcho": {{sEcho}}, 
    "iTotalRecords": {{iTotalRecords}}, 
    "iTotalDisplayRecords": {{iTotalDisplayRecords}}, 
    "aaData":[ 
    {% for obj in querySet %} 
    [ 
     "{{obj.name}}", 
     "{{obj.message|truncatewords:20}}", 
     "<a href=\"{% url some_view obj.id %}\">{{obj.name}}</a>" 
    ] 
    {% if not forloop.last %} 
    , 
    {% endif %} 
    {% endfor %} 
    ] 
} 

우리가 찾고 있던 아름 다운 JSON으로 렌더링 : 우리는 구조를 제공하는 가장 빠른 방법은 이와 같은 간단한 템플릿을 작성하는 것입니다 발견했다. 형식에 대한 완벽한 제어 기능을 제공합니다. 다른 장점은 우리의 경우에 정말 유용한 내장 장고 필터를 사용하여 객체 필드를 수정하는 능력입니다.

책에 설명 된대로 직렬화가 아니라는 것을 알고 있지만 일부 개체를 사용자 지정 형식으로 변환하려는 경우이 솔루션이 가장 빠른 것일 수 있습니다. 어떤 이유로 django 개발자는 html뿐만 아니라 주어진 형식으로 템플릿을 렌더링 할 수 있도록 허용 했으므로 왜 사용하지 않을까요?

위의 예는 매우 구체적이지만 다른 형식을 생성 할 수 있습니다. 물론이 형식으로 개체를 복원 할 수있는 deserializer를 작성하는 것은 고통 스러울 수 있지만 필요하지 않은 경우 ...

+0

ಠ_ pain 통증의 처방처럼 들립니다. 수동으로 데이터를 "기본"객체로 변환 한 다음 json/무엇을 사용하여 직렬화하는 것이 더 쉽지 않습니까? –

+0

아니요. 당신은 개인적으로 일부 serializer가 자신의 특정 구조에 맞는 데이터를 출력한다고 언급했습니다. 나는 이것을 사용하여 다른 방법을 얻기에는 너무 어려운 json 형식을 생성한다. 물론 serializer를 작성하는 방법을 알고 있다면 - do : – dzida

+0

좋아, 글쎄, 어쩌면 나는 단지 충분히 창조적이지 않다. 당신이 생각하고있는 것을 보여줄 수 있습니까? 예를 들어, 다음과 같은 것을 염두에 둡니다 :'serialized = [{ "name": person.name, "friends": [{ "name": friend.name} person.friends.all() ]} 사람들을위한 사람]; return simplejson.dumps (serialize); ' –

1

편집 :

이제 밖으로 나는 현재 장고를위한 완전한 기능을 갖춘 직렬화 프레임 워크를 쓰고 있어요


https://bitbucket.org/sebpiq/any2any/에서. 목표는 정확하게 직렬화를 완전히 제어하는 ​​것입니다. 아마 당신의 요구 사항을 꽤 잘 채울 것입니다! 그러나 아직 준비되지 않았습니다. 1 ~ 2 주 안에 첫 번째 버전을 출시 할 수있을 것으로 예상됩니다.

Google 코드는 여전히 확인할 수 있습니다 : http://code.google.com/p/django-serializable/, 관심이 있다면 도움을 제공 할 수도 있습니다.

첫 번째 출시가 끝나면 추천 다운로드가 제공됩니다.

+0

굉장! 나는 독자들에게 RSS 피드를 추가했으며, 내가 쓴 것을 보길 고대하고있다. –

+0

안녕 데이빗! 나는 다른 것들에 대해 매우 바빴 기 때문에 아직 준비가되어 있지 않다. 그러나 당신은 그것을 체크 할 수있다 : 그것은 모델과 그 부모를 이미 직렬화/비 직렬화 할 수있다. 그것이 아직 안정적이지 않다는 유일한 문제는 ... – sebpiq

관련 문제