Я использую поршень, и я хотел бы выложить пользовательский формат для своего ответа.
Моя модель - что-то вроде этого:
class Car(db.Model):
name = models.CharField(max_length=256)
color = models.CharField(max_length=256)
Теперь, когда я, проблема a ПОЛУЧАЕТ запрос к чему-то как/api/cars/1/, я хочу получить ответ как это:
{'name' : 'BMW', 'color' : 'Blue',
'link' : {'self' : '/api/cars/1'}
}
Однако поршень только производит это:
{'name' : 'BMW', 'color' : 'Blue'}
Другими словами, я хочу настроить представление конкретного ресурса.
Мой поршневой обработчик Ресурсов в настоящее время похож на это:
class CarHandler(AnonymousBaseHandler):
allowed_methods = ('GET',)
model = Car
fields = ('name', 'color',)
def read(self, request, car_id):
return Car.get(pk=car_id)
Таким образом, я действительно не добираюсь, где у меня есть шанс настроить данные. Если я не должен перезаписывать эмиттер JSON, но это походит на фрагмент.
Вы можете вернуть пользовательский формат, вернув словарь Python. Вот пример одного из моих приложений. Надеюсь, это поможет.
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}
Джанго поставляется с библиотекой сериализации. Также вам понадобится библиотека json, чтобы получить ее в нужном вам формате
http://docs.djangoproject.com/en/dev/topics/serialization/
from django.core import serializers
import simplejson
class CarHandler(AnonymousBaseHandler):
allowed_methods = ('GET',)
model = Car
fields = ('name', 'color',)
def read(self, request, car_id):
return simplejson.dumps( serializers.serialize("json", Car.get(pk=car_id) )