[
课程介绍](_index_)
[
引入DjangoRESTframework](c01-introducetodrf_index)-[Web应用模式](c01-introducetodrf_separatedfrontendandbackend)
[
认识RESTful](c01-introducetodrf_introducetorest)
[
RESTful设计方法](c01-introducetodrf_howtodesignrest)
[
使用Django开发REST接口](c01-introducetodrf_developrestapiwithdjango)
[
明确REST接口开发的核心任务](c01-introducetodrf_coretasktodeveloprestapi)
[
DjangoRESTframework简介](c01-introducetodrf_aboutdrf)
[
DRF工程搭建](c02-drfproject_index)-[环境安装与配置](c02-drfproject_installandconfig)
[
见识DRF的魅力](c02-drfproject_thefirstdrfprogram)
[
Serializer序列化器](c03-serializer_index)-[定义Serializer](c03-serializer_declaring)
[
序列化使用](c03-serializer_serializing)
[
反序列化使用](c03-serializer_deserializing)
[
模型类序列化器ModelSerializer](c03-serializer_modelserializer)
[
视图](c04-view_index)-[Request与Response](c04-view_requestandresponse)
[
视图概览](c04-view_view)
[
视图说明](c04-view_viewintroduction)
[
视图集ViewSet](c04-view_viewset)
[
路由Router](c04-view_routers)
[
其他功能](c05-components_index)-[认证](c05-components_authentication)
[
权限](c05-components_permissions)
[
限流](c05-components_throttling)
[
过滤](c05-components_filtering)
[
排序](c05-components_ordering)
[
分页](c05-components_pagination)
[
版本](c05-components_versioning)
[
异常处理](c05-components_exceptions)
[
自动生成接口文档](c05-components_documents)
[Published with GitBook](https://www.gitbook.com)
课程介绍
版本Versioning
REST framework提供了版本号的支持。
在需要获取请求的版本号时,可以通过request.version来获取。
默认版本功能未开启,request.version 返回None。
开启版本支持功能,需要在配置文件中设置DEFAULT_VERSIONING_CLASS
REST_FRAMEWORK = {'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'}
其他可选配置:
- DEFAULT_VERSION 默认版本号,默认值为None
- ALLOWED_VERSIONS 允许请求的版本号,默认值为None
- VERSION_PARAM 识别版本号参数的名称,默认值为’version’
支持的版本处理方式
1) AcceptHeaderVersioning
请求头中传递的Accept携带version ``` GET /bookings/ HTTP/1.1 Host: example.com Accept: application/json; version=1.0
**2)URLPathVersioning**<br />URL路径中携带
urlpatterns = [
url(
r’^(?P
**3)NamespaceVersioning**<br />命名空间中定义
bookings/urls.py
urlpatterns = [
url(r’^$’, bookings_list, name=’bookings-list’),
url(r’^(?P
urls.py
urlpatterns = [ url(r’^v1/bookings/‘, include(‘bookings.urls’, namespace=’v1’)), url(r’^v2/bookings/‘, include(‘bookings.urls’, namespace=’v2’)) ]
**4)HostNameVersioning**<br />主机域名携带
GET /bookings/ HTTP/1.1 Host: v1.example.com Accept: application/json
**5)QueryParameterVersioning**<br />查询字符串携带
GET /something/?version=0.1 HTTP/1.1 Host: example.com Accept: application/json
### 示例
REST_FRAMEWORK = { ‘DEFAULT_VERSIONING_CLASS’: ‘rest_framework.versioning.QueryParameterVersioning’ }
```class BookInfoSerializer(serializers.ModelSerializer):"""图书数据序列化器"""class Meta:model = BookInfofields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment')class BookInfoSerializer2(serializers.ModelSerializer):"""图书数据序列化器"""class Meta:model = BookInfofields = ('id', 'btitle', 'bpub_date')class BookDetailView(RetrieveAPIView):queryset = BookInfo.objects.all()def get_serializer_class(self):if self.request.version == '1.0':return BookInfoSerializerelse:return BookInfoSerializer2# 127.0.0.1:8000/books/2/# 127.0.0.1:8000/books/2/?version=1.0
