自定义Tastypie的URL Conf

时间:2011-09-08 15:52:11

标签: django api tastypie

我将我的API从Piston移植到TastyPie。我们有现有的客户端,因此我们希望保持API的url结构相同。

我网站的顶级urls.py conf看起来像这样:

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

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

使用Piston,然后在api.urls中独立注册每个单独的资源并添加到urlpatterns中,因此您可能会看到/ v1 / deals /。

现在,我在使用TastyPie重新创建此结构时遇到了一些问题。在顶层,Tastypie Api()对象的urlpatterns需要一个名为“api_name”的捕获组。默认情况下,v1被硬编码为顶级模式,但您可以通过在实例化Api()时将“api_name”作为关键字参数来覆盖它。

我目前的api.urls.py看起来像这样(有tastypie):

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

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

结果是API匹配的模式现在是'/ v1 / v1 / [resource_name] /'。

一个问题是我没有看到如何从顶级网址中删除^ v1 /'。我们的索引页面匹配'^ $',所以我不能只走这条路。

我想我可以只注册个人模型资源,而不是api对象。这似乎不是最理想的。我错了吗?

我还考虑了对Tastypie Api对象进行子类化并删除“api_name”捕获组。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我认为最好的方法仍然是从顶级urlconf中删除'v1'前缀。有点像:

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

这样,空请求将映射到您的主页,而API请求将转到 api.urls 配置。

另一种方法是直接将API网址添加到urlpatterns实例:

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

urlpatterns += api.urls.ulrpatterns