URL-адреса REST с вкусным пирогом

Я использую deliciouspie в своем приложении django и пытаюсь заставить его отображать URL-адреса, такие как «/api/booking/2011/01/01», которые сопоставляются с моделью бронирования с указанной отметкой времени в URL-адресе. В документации не указано, как этого добиться.


person sw00    schedule 03.08.2011    source источник


Ответы (1)


Что вы хотите сделать в своем Ресурсе, так это предоставить

def prepend_urls(self):
    return [
        url(r"^(?P<resource_name>%s)/(?P<year>[\d]{4})/(?P<month>{1,2})/(?<day>[\d]{1,2})%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('dispatch_list_with_date'), name="api_dispatch_list_with_date"),
    ]

метод, который возвращает URL-адрес, указывающий на представление (я назвал его dispatch_list_with_date), которое делает то, что вы хотите.

Например, в классе base_urls он указывает на представление под названием 'dispatch_list', которое является основной точкой входа для перечисления ресурса, и вы, вероятно, захотите воспроизвести его с помощью собственной фильтрации.

Ваш вид может выглядеть примерно так

def dispatch_list_with_date(self, request, resource_name, year, month, day):
    # dispatch_list accepts kwargs (model_date_field should be replaced) which 
    # then get passed as filters, eventually, to obj_get_list, it's all in this file
    # https://github.com/toastdriven/django-tastypie/blob/master/tastypie/resources.py
    return dispatch_list(self, request, resource_name, model_date_field="%s-%s-%s" % year, month, day)

На самом деле я бы, вероятно, просто добавил фильтр в обычный список ресурсов

GET /api/booking/?model_date_field=2011-01-01

Вы можете получить это, добавив атрибут фильтрации в свой метакласс.

Но это личное предпочтение.

person Issac Kelly    schedule 04.08.2011
comment
ах, ладно, я думаю, что лучше вообще не использовать вкусный пирог, если я хочу добиться первого. так как я все равно мог реализовать это с помощью url_conf vanilla django. - person sw00; 05.08.2011
comment
Я довольно неравнодушен к дополнительным функциональным возможностям и форматированию Tastypie, но, конечно, всегда больше, чем один способ содрать шкуру с кошки. - person Issac Kelly; 05.08.2011
comment
Спасибо за отличный пример! Очень полезно. - person Spike; 19.11.2011
comment
Комментарий в коде deliciouspie: override_urls устарел. Будет удален v1.0.0. Пожалуйста, используйте prepend_urls вместо этого. - person Or Arbel; 23.02.2013
comment
Да, скоро вам придется использовать prepend_urls. Обновлен ответ. - person Issac Kelly; 24.02.2013