我有我想通过web服务发布版本的历史数据。要做到这一点,我使用的是Django-Rest-Framework。我已经在使用这个框架来提供其他服务,但现在似乎有点难以实现这一目标。Django-Rest-Framework动态url(动态前缀)
主要目标是提供一个网址:
http://127.0.0.1:8000/service/vocab (realtime) - done
http://127.0.0.1:8000/service/v1/vocab (version 1)
http://127.0.0.1:8000/service/v2/vocab (version 2)
http://127.0.0.1:8000/service/vn/vocab (version n)
为了这个,我正在尝试配置的DRF路由器使这成为可能。
这样的想法是这样的:
urls.py
router = routers.DefaultRouter()
router.register(r'vocab', views.VocabViewSet, 'vocabs')
router.register(r'{version}/vocab', views.VersionViewSet, 'vocab')
urlpatterns = patterns('',
...
url(r'^service/', include(router.urls))
)
views.py
class VersionViewSet(viewsets.ModelViewSet):
queryset = Version.objects.all()
serializer_class = VersionSerializer
@detail_route(methods=['post'], url_path='vocab')
def get_vocabs(self, request, version='v1'):
queryset = Version.objects.filter(version=version)
在这种情况下发生:
invalid literal for int() with base 10: 'version'
这是因为DRF在service/
之后期望int。
我正试图找到解决这个案例。你能提供任何提示,我怎么能做到这一点?
也许Customize dynamic routes是一个很好的方法,你怎么看?如果是这样,你能提供一个例子来说明在这种情况下还是类似的情况?
在此先感谢。
这不是动态的。如果你在后台定义第三个版本?你将如何定义?你将不得不去urls.py并定义一个新的url模式? – ePascoal