我有我想通過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