我有一个在Django rest-framework中构建的API。模型的第一个版本不支持post / create。我现在使用here描述的URL路径方法添加我的API的v2。
这是我的主要URL路由器:
from django.conf.urls import include, url
from rest_framework.authtoken.views import obtain_auth_token
from board.urls import router
urlpatterns = [
url(r'^api/token/', obtain_auth_token, name='api-token'),
url(r'^api/', include(router.urls)),
url(r'^api/(?P<version>(1.0|2.0))/', include(router.urls)),
]
这是我的项目特定的URL路由器:
from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()
router.register(r'sprints', views.SprintViewSet)
router.register(r'tasks', views.TaskViewSet)
router.register(r'users', views.UserViewSet)
以下是我的观点:
class SprintViewSet(DefaultsMixin, viewsets.ReadOnlyModelViewSet):
def get_serializer_class(self):
if self.request.version == '2.0':
return SprintSerializer2
return SprintSerializer
queryset = Sprint.objects.order_by('end')
我的问题是:我如何从这个只读视图更改为基于版本的可更新视图?
我已经考虑了两种方法,但我不确定如何做...
一种是路由到不同的视图,但我不确定如何从包含的路由器获取版本。
第二种方法是以某种方式告诉Django根据版本动态支持post / create。
[注意:此代码来自过度简化的教程,但表达了我在更复杂的应用程序中遇到的问题]
答案 0 :(得分:0)
我认为这里的答案是使用不同的URL路由,而不是检查版本标记。
e.g。
api/sprints/<id>/get
api/v2/sprints/<id>/get
在URL级别,您将路由到v1 / v2的其他ViewSet