Поршень настраивает представление ответа

Я использую поршень, и я хотел бы выложить пользовательский формат для своего ответа.

Моя модель - что-то вроде этого:

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, но это походит на фрагмент.

6
задан Vadim Kotov 18 October 2017 в 15:57
поделиться

2 ответа

Вы можете вернуть пользовательский формат, вернув словарь 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}
6
ответ дан 17 December 2019 в 04:47
поделиться

Джанго поставляется с библиотекой сериализации. Также вам понадобится библиотека 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) )
-2
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: