6
votes

Piston Personnaliser la représentation de la réponse

J'utilise le piston et j'aimerais cracher un format personnalisé pour ma réponse.

Mon modèle est quelque chose comme ceci: P>

class CarHandler(AnonymousBaseHandler):
    allowed_methods = ('GET',)
    model = Car
    fields = ('name', 'color',)

    def read(self, request, car_id):
           return Car.get(pk=car_id)


0 commentaires

3 Réponses :


-2
votes

Django est livré avec une bibliothèque de sérialisation. Vous aurez également besoin d'une bibliothèque JSON pour l'obtenir dans le format que vous souhaitez

http://docs.djangoproject.com/fr/dev/topics/serialization/ xxx


1 commentaires

La question est de savoir comment ajouter des champs à la représentation de l'objet JSON, et non de la manière de produire JSON.



6
votes

Vous pouvez revenir au format personnalisé en renvoyant un dictionnaire Python. Voici un exemple sur l'une de mes applications. J'espère que cela aide.

from models import *
from piston.handler import BaseHandler
from django.http import Http404

class ZipCodeHandler(BaseHandler):
    methods_allowed = ('GET',)

    def read(self, request, zip_code):
        try:
            points = DeliveryPoint.objects.filter(zip_code=zip_code).order_by("name")
            dps = []
            for p in points:
                name = p.name if (len(p.name)<=16) else p.name[:16]+"..."
                dps.append({'name': name, 'zone': p.zone, 'price': p.price})
            return {'length':len(dps), 'dps':dps}    
        except Exception, e:
            return {'length':0, "error":e}


2 commentaires

Donc, vous pouvez retourner un dictionnaire! Grands trucs, ne savaient pas ça. Merci!


Wow, c'est une agréable surprise!



1
votes

Cela fait deux ans que cette question a été posée, donc c'est évidemment tardive pour OP. Mais pour d'autres personnes qui, comme moi, avaient un dilemme similaire, il existe un pistonique pistonique pour que cela soit fait.

Utilisation de l'exemple Django de sondages et de choix -

Vous allez Remarquez que pour le ChoiceHandler, la réponse JSON est la suivante: xxx

ceci inclut l'ensemble du JSON pour le sondage associé, tandis que juste le ID car il aurait pu être tout aussi bien sinon mieux.

Disons que la réponse souhaitée est la suivante: xxx

Voici comment vous allez éditer le gestionnaire pour atteindre cet objectif: xxx


1 commentaires

Y a-t-il un équivalent pour un champ imbriqué? Semble que le piston ne supporte que non pas inutile, sur la base de ses émetteurs.py