1. [
  1. 课程介绍
  2. ](_index_)
    1. [
  1. 引入DjangoRESTframework
  2. ](c01-introducetodrf_index)
  3. -
  4. [
  5. Web应用模式
  6. ](c01-introducetodrf_separatedfrontendandbackend)
    1. [
  1. 认识RESTful
  2. ](c01-introducetodrf_introducetorest)
    1. [
  1. RESTful设计方法
  2. ](c01-introducetodrf_howtodesignrest)
    1. [
  1. 使用Django开发REST接口
  2. ](c01-introducetodrf_developrestapiwithdjango)
    1. [
  1. 明确REST接口开发的核心任务
  2. ](c01-introducetodrf_coretasktodeveloprestapi)
    1. [
  1. DjangoRESTframework简介
  2. ](c01-introducetodrf_aboutdrf)
    1. [
  1. DRF工程搭建
  2. ](c02-drfproject_index)
  3. -
  4. [
  5. 环境安装与配置
  6. ](c02-drfproject_installandconfig)
    1. [
  1. 见识DRF的魅力
  2. ](c02-drfproject_thefirstdrfprogram)
    1. [
  1. Serializer序列化器
  2. ](c03-serializer_index)
  3. -
  4. [
  5. 定义Serializer
  6. ](c03-serializer_declaring)
    1. [
  1. 序列化使用
  2. ](c03-serializer_serializing)
    1. [
  1. 反序列化使用
  2. ](c03-serializer_deserializing)
    1. [
  1. 模型类序列化器ModelSerializer
  2. ](c03-serializer_modelserializer)
    1. [
  1. 视图
  2. ](c04-view_index)
  3. -
  4. [
  5. RequestResponse
  6. ](c04-view_requestandresponse)
    1. [
  1. 视图概览
  2. ](c04-view_view)
    1. [
  1. 视图说明
  2. ](c04-view_viewintroduction)
    1. [
  1. 视图集ViewSet
  2. ](c04-view_viewset)
    1. [
  1. 路由Router
  2. ](c04-view_routers)
    1. [
  1. 其他功能
  2. ](c05-components_index)
  3. -
  4. [
  5. 认证
  6. ](c05-components_authentication)
    1. [
  1. 权限
  2. ](c05-components_permissions)
    1. [
  1. 限流
  2. ](c05-components_throttling)
    1. [
  1. 过滤
  2. ](c05-components_filtering)
    1. [
  1. 排序
  2. ](c05-components_ordering)
    1. [
  1. 分页
  2. ](c05-components_pagination)
    1. [
  1. 版本
  2. ](c05-components_versioning)
    1. [
  1. 异常处理
  2. ](c05-components_exceptions)
    1. [
  1. 自动生成接口文档
  2. ](c05-components_documents)
    1. [
    2. Published with GitBook
    3. ](https://www.gitbook.com)

课程介绍

版本Versioning

REST framework提供了版本号的支持。
在需要获取请求的版本号时,可以通过request.version来获取。
默认版本功能未开启,request.version 返回None。
开启版本支持功能,需要在配置文件中设置DEFAULT_VERSIONING_CLASS

  1. REST_FRAMEWORK = {
  2. 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'
  3. }

其他可选配置:

  • 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
  1. **2URLPathVersioning**<br />URL路径中携带

urlpatterns = [ url( r’^(?P(v1|v2))/bookings/$’, bookings_list, name=’bookings-list’ ), url( r’^(?P(v1|v2))/bookings/(?P[0-9]+)/$’, bookings_detail, name=’bookings-detail’ ) ]

  1. **3NamespaceVersioning**<br />命名空间中定义

bookings/urls.py

urlpatterns = [ url(r’^$’, bookings_list, name=’bookings-list’), url(r’^(?P[0-9]+)/$’, bookings_detail, name=’bookings-detail’) ]

urls.py

urlpatterns = [ url(r’^v1/bookings/‘, include(‘bookings.urls’, namespace=’v1’)), url(r’^v2/bookings/‘, include(‘bookings.urls’, namespace=’v2’)) ]

  1. **4HostNameVersioning**<br />主机域名携带

GET /bookings/ HTTP/1.1 Host: v1.example.com Accept: application/json

  1. **5QueryParameterVersioning**<br />查询字符串携带

GET /something/?version=0.1 HTTP/1.1 Host: example.com Accept: application/json

  1. ### 示例

REST_FRAMEWORK = { ‘DEFAULT_VERSIONING_CLASS’: ‘rest_framework.versioning.QueryParameterVersioning’ }

  1. ```
  2. class BookInfoSerializer(serializers.ModelSerializer):
  3. """图书数据序列化器"""
  4. class Meta:
  5. model = BookInfo
  6. fields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment')
  7. class BookInfoSerializer2(serializers.ModelSerializer):
  8. """图书数据序列化器"""
  9. class Meta:
  10. model = BookInfo
  11. fields = ('id', 'btitle', 'bpub_date')
  12. class BookDetailView(RetrieveAPIView):
  13. queryset = BookInfo.objects.all()
  14. def get_serializer_class(self):
  15. if self.request.version == '1.0':
  16. return BookInfoSerializer
  17. else:
  18. return BookInfoSerializer2
  19. # 127.0.0.1:8000/books/2/
  20. # 127.0.0.1:8000/books/2/?version=1.0