我将我的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”捕获组。
有什么想法吗?
答案 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