我正在使用活塞,我想吐出一种自定义格式以用于响应。
我的模型是这样的:
class Car(db.Model):
name = models.CharField(max_length=256)
color = models.CharField(max_length=256)
现在,当我向/api/cars/1/之类的对象发出GET请求时,我想要得到这样的响应:
{'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}
关于python - 活塞自定义响应表示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2007195/