Как заставить VIEW возвращать сериализованные данные? - PullRequest
0 голосов
/ 04 марта 2012

URL-адрес был перезаписан в следующем примере, чтобы я мог передать что-то вроде http://localhost:8000/api/v1/entry/1234/1233/?format=json,, что будет передавать параметры в WRAP VIEW, когда я выполняю self.create_response (запрос, данные), только браузерпоказывает что-то вроде

api.Entry объект в 0x2e27a50

в браузере, поля не сериализуются: Примечание: на этом этапе мне не нужен ModelResource.Как я могу сделать пользовательское представление dispatch_data для возврата данных, таких как obj_get и get_object_list?Вот проблемный кусок кода:

#Object class
Class Entry(object)
    name = ''


#Resource class
class EntryResource(Resource):
    name = fields.CharField(attribute = 'name')

    class Meta:
        resource_name = 'entry'
        object_class = Entry
        include_resource_uri = False 
        authentication = Authentication()
        authorization = Authorization()
        serializer = Serializer()

    def override_urls(self):
        return [url(r"^(?P<resource_name>%s)/(?P<p1>[\d]{4})/(?P<p2>[\d]{4})%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('dispatch_data'),name='api_dispatch_data'),]

    def dispatch_data(self, request, **kwargs):
         p1 = kwargs['p1'] #params can be retrieved here
         p1 = kwargs['p2']
         info = Entry()
         info.name = p1 #just example
         response = {1:info}
         return info.values() 
         #Above results in ERROR, it will say Entry object has no attribute 'has_header' 
         #changing to self.create_response(request, info) will not serialize the fields



#urls.py
api = Api(api_name='v1')
api.register(EntryResource())

urlpatterns = patterns('',
    url(r'^api/', include(api.urls)),
)

1 Ответ

0 голосов
/ 08 марта 2012

Я думаю, что Tastypie Использование Tastypie с источниками данных не-ORM содержит всю необходимую информацию.

В основном вы должны реализовать методы, отвечающие за возврат объектов (и / или создание, удаление и т. Д., Если они вам нужны).Вам не нужно нажимать «dispatch ()», если вам не нужно настраивать то, что он делает.

Это зависит от ваших потребностей, но если вы хотите, чтобы ресурс работал так, как если бы он имел obj_get и obj_get_list, вам нужнореализовать два.Пример, который я упомянул, довольно хорош и должен помочь вам ...

...