南宁网站建设找建站通,网页制作与网站管理,一级a做爰片免费网站性恔,宁波哪家做网站好在restful规范中#xff0c;后端的API中需要体现版本。如果项目比较大#xff0c;需要些很多的视图类#xff0c;在每一个类中都写一遍会比较麻烦#xff0c;所以drf中也支持了全局配置。在每个版本处理的类中还定义了reverse方法#xff0c;他是用来反向生成URL并携带相关…在restful规范中后端的API中需要体现版本。如果项目比较大需要些很多的视图类在每一个类中都写一遍会比较麻烦所以drf中也支持了全局配置。在每个版本处理的类中还定义了reverse方法他是用来反向生成URL并携带相关的的版本信息用的。
REST_FRAMEWORK {DEFAULT_VERSIONING_CLASS: rest_framework.versioning.QueryParameterVersioning, # 处理版本的类的路径VERSION_PARAM: version, # URL参数传参时的key例如xxxx?versionv1ALLOWED_VERSIONS: [v1, v2, v3], # 限制支持的版本None表示无限制DEFAULT_VERSION: v1, # 默认版本
}
一、基于GET传递参数
1、settings.py
REST_FRAMEWORK{UNAUTHENTICATED_USER: None,VERSION_PARAM:version, # 决定url中版本的参数值不设置默认也是这个值可以通过修改这里修改,例如改为vDEFAULT_VERSION:v1, # 默认版本ALLOWED_VERSIONS:[v1,v2] #支持的版本范围
}
2、urls.py
urlpatterns [# path(admin/, admin.site.urls),path(home/, views.HomeView.as_view(),namehh),
]
3、views.py
from rest_framework.versioning import QueryParameterVersioningclass HomeView(APIView):# 传递过程中可以携带版本信息# http://127.0.0.1:8000/home/versionv1 ,会自动读出版本赋值给request.versionversioning_class QueryParameterVersioningdef get(self,request):print(request.version)print(request.versioning_scheme)url request.versioning_scheme.reverse(hh,requestrequest)print(反向生产URL,url)return Response(...)
二、基于路由传递参数
1、urls.py
urlpatterns [# 下面这两种写法都可以一种是基于re_path的路由# path(api/str:version/home/, views.HomeView.as_view(), namehh),re_path(r^api/(?Pversion\w)/home/,views.HomeView.as_view(),namehh),]
2、settings.py
REST_FRAMEWORK{UNAUTHENTICATED_USER: None,VERSION_PARAM:version, # 决定url中版本的参数值不设置默认也是这个值可以通过修改这里修改DEFAULT_VERSION:v1, # 默认版本ALLOWED_VERSIONS:[v1,v2] #支持的版本范围
}
3、views.py
from rest_framework.versioning import URLPathVersioningclass HomeView(APIView):# 传递过程中可以携带版本信息# http://127.0.0.1:8000/home/versionv1 ,会自动读出版本赋值给request.versionversioning_class URLPathVersioningdef get(self,request,*args,**kwargs):print(request.version)print(request.versioning_scheme)url request.versioning_scheme.reverse(hh,requestrequest)print(反向生产URL,url)return Response(...)
三、基于请求头传递参数
1、urls.py
urlpatterns [# 基于请求头传递参数path(api/home/, views.HomeView.as_view(), namehh),
]2、views.py
from rest_framework.versioning import QueryParameterVersioning,URLPathVersioning,AcceptHeaderVersioningclass HomeView(APIView):versioning_class AcceptHeaderVersioningdef get(self,request,*args,**kwargs):print(request.version)print(request.versioning_scheme)url request.versioning_scheme.reverse(hh,requestrequest)print(反向生产URL,url)return Response(...)
四、在实际项目中第二种通过URL传递版本号的方式还是比较常用在使用的时候可以通过全局配置在views中就不需要在引入和单独设置了可以直接使用案例如下
1、settings.py
REST_FRAMEWORK{# 版本号传递全局设置VERSION_PARAM:version, # 决定url中版本的参数值不设置默认也是这个值可以通过修改这里修改DEFAULT_VERSION:v1, # 默认版本ALLOWED_VERSIONS:[v1,v2], #支 持的版本范围DEFAULT_VERSIONING_CLASS:rest_framework.versioning.URLPathVersioning,
}
2、urls.py # 基于URL传递参数path(api/str:version/home/, views.HomeView.as_view(), namehh),
3、views.py
from rest_framework.views import APIView
from rest_framework.response import Responseclass HomeView(APIView):def get(self,request,*args,**kwargs):print(request.version)print(request.versioning_scheme)url request.versioning_scheme.reverse(hh,requestrequest)print(反向生产URL,url)return Response(...)