我有历史数据,我希望通过版本的webservice发布。要做到这一点,我使用Django-Rest-Framework。我已经使用这个框架来提供其他服务,但现在看来实现这个目标有点困难。
主要目标是提供网址:
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是一个好方法,你怎么看?如果是这样,你能提供一个如何在这种情况下应用它的例子吗?
提前致谢。
答案 0 :(得分:1)
正确答案是URL版本控制,Django Rest Framework自动支持。您可以在此处找到所需的所有详细信息:
http://www.django-rest-framework.org/api-guide/versioning/
在您的特定情况下,您需要使用cmbPaymentType.DisplayMember = "PaymentTypeName"
cmbPaymentType.ValueMember = "PaymentTypeID"
cmbPaymentType.DataSource = _paymentTypes
cmbPaymentType.DataBindings.Add("SelectedValue", _data, "PaymentTypeID", False, DataSourceUpdateMode.OnPropertyChanged)
。您可以首先将此键值对添加到URLPathVersioning
设置中:
REST_FRAMEWORK
然后,配置与此类似的REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning'
}
:
http://www.django-rest-framework.org/api-guide/versioning/#urlpathversioning
答案 1 :(得分:0)
您可以拥有一个包含多个文件的网址文件夹(runtime = JS_NewRuntime(8L * 1024L * 1024L);
,__init__.py
和urls_api_1_0.py
)。
基本上每个API版本和您的urls_api_1_0.py
文件都有一个文件。哪个路由您的不同API版本。见下面的代码
__init__.py
您的import urls_api_1_0
import urls_api_2_0
urlpatterns = patterns('',
url(r'^api/v1/', include(urls_api_1_0)),
url(r'^api/v2/', include(urls_api_2_0)),
)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += format_suffix_patterns(urlpatterns, allowed=['json', 'html'])
可能看起来像这样
urls_api_1_0.py