rest framework-版本-长期维护
############### 版本 ###############
# # 版本的问题: # rest_framework.versioning.URLPathVersioning # 一般就是这种,http://127.0.0.1:8000/api/v2/course/ # 只要配置好了,以后就很少动了, # 原理要知道 # 使用: # 1,添加配置, # 2,设置路由, # 3,获取版本,
############### 全局配置 注意,通常我们是不会单独给某个视图设置版本控制的 ###############
settings.py中
REST_FRAMEWORK = { ... 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning', 'DEFAULT_VERSION': 'v1', # 默认的版本 'ALLOWED_VERSIONS': ['v1', 'v2'], # 有效的版本 'VERSION_PARAM': 'version', # 版本的参数名与URL conf中一致 }
urls.py中
urlpatterns = [ ... url(r'^(?P<version>[v1|v2]+)/publishers/$', views.PublisherViewSet.as_view({'get': 'list', 'post': 'create'})), url(r'^(?P<version>[v1|v2]+)/publishers/(?P<pk>\d+)/$', views.PublisherViewSet.
as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})), ]
我们可以在视图中自定义具体的行为,下面以不同的版本返回不同的序列化类为例
class PublisherViewSet(ModelViewSet): def get_serializer_class(self): """不同的版本使用不同的序列化类""" if self.request.version == 'v1': return PublisherModelSerializerVersion1 else: return PublisherModelSerializer queryset = models.Publisher.objects.all()
############### 版本 ###############
############### 版本 ###############
############### 版本 ###############
技术改变命运