Настройка конфигурации URL Tastypie

Я переношу свой API с Piston на TastyPie. У нас есть существующие клиенты, поэтому мы хотим сохранить структуру URL-адресов API такой же.

Конфигурация urls.py верхнего уровня моего сайта выглядит так:

    urlpatterns = patterns('',
          ........LOTS OF STUFF

          (r'^v1/', include('api.urls')),

Используя Piston, каждый отдельный ресурс затем регистрируется независимо в api.urls и добавляется в шаблоны URL-адресов, поэтому вы можете увидеть, например, /v1/deals/.

Теперь у меня возникли проблемы с воссозданием этой структуры с помощью TastyPie. На верхнем уровне url-шаблоны объекта Tastypie Api() ожидают группу захвата с именем «api_name». По умолчанию v1 жестко закодирован как этот шаблон верхнего уровня, хотя вы можете переопределить его, передав «api_name» в качестве аргумента ключевого слова при создании экземпляра Api().

Мой текущий api.urls.py выглядит так (с вкусным пирогом):

   v1_api = Api()
   v1_api.register(DealResource())

   urlpatterns = patterns('',
       (r'^', include(v1_api.urls)),

)

В результате шаблон, который должен сопоставляться с API, теперь имеет вид '/v1/v1/[имя_ресурса]/'.

Одна проблема заключается в том, что я не вижу, как я могу удалить ^v1/' из конфигурации URL верхнего уровня. Наша индексная страница соответствует '^$', поэтому я не могу просто пойти по этому пути.

Я полагаю, что мог бы просто зарегистрировать отдельные ресурсы модели, а не объект API. Хотя это кажется неоптимальным. Я ошибся?

Я также рассматривал возможность создания подкласса объекта Tastypie Api и удаления группы захвата «api_name».

Есть предположения?


person Ben    schedule 08.09.2011    source источник


Ответы (1)


Я считаю, что лучший подход — удалить префикс «v1» из urlconf верхнего уровня. Что-то вроде:

urlpatterns = patterns('',
    ........LOTS OF STUFF
    (r'^$', 'app.views.home_page'),
    (r'', include('api.urls')),
)

Таким образом, пустые запросы будут сопоставляться с вашей домашней страницей, а запросы API — с вашей конфигурацией api.urls.

Другой способ сделать это — просто добавить URL-адреса API непосредственно в экземпляр urlpatterns:

urlpatterns = patterns('',
    ........LOTS OF STUFF
)

urlpatterns += api.urls.ulrpatterns
person JSTL    schedule 22.09.2011