Настройка URL-адреса Tastypie - PullRequest
       2

Настройка URL-адреса Tastypie

2 голосов
/ 08 сентября 2011

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

Верхний уровень моего сайта urls.py conf выглядит следующим образом:

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

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

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

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

Мой текущий файл api.urls.py выглядит следующим образом (с tastypie):

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

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

)

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

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

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

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

Есть мысли?

1 Ответ

3 голосов
/ 23 сентября 2011

Я полагаю, что лучший подход - это удалить префикс '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
...