02 API版本
获取api版本
# 在URL的get方法中传参,version# 1. 手工获取API版本class UsersView(APIView):def get(self, request,*args,**kwargs):# 1. 使用原生 requets# version = request._reqeust.GET.get('version')# print(version)# 2. 使用 django rest 封装后的version=request.query_params.get('version')print(version)return HttpResponse(用户列表)# 2.使用 django rest 自动化获取 api版本 - 自定义from rest_framework.versioning import BaseVersioningclass ParamVersion(object):def determine_version(self, request,* args,** kwargs):# 获取url中get的参数version=request.query_params.get('version')return versionclass UsersView(APIView):versioning_class = ParamVersiondef get(self, request,*args,**kwargs):# 2. 使用 django rest 封装后的# version=request.query_params.get('version')# print(version)print(reqeust.version)return HttpResponse(用户列表)# 3. 使用 django rest 自动化获取 api版本 - get参数from rest_framework.versioning import QueryParameterVersioningclass UsersView(APIView):versioning_class =QueryParameterVersioningdef get(self, request,*args,**kwargs):print(reqeust.version)return HttpResponse(用户列表)# 可以在配置文件中配置相关的三个配置REST FRAMEWORK={"DEFAULT_VERSION":'v1', # 默认版本"ALLOWED_VERSIONS":['v1','v2'], # 允许的版本"VERSION_PARAM":'versio', # get参数的key}# 在URL的path中使用版本号# 4. 使用 django rest 自动化获取 api版本 - URL path - 局部处理from rest_framework.versioning import URLPathVersioningclass UsersView(APIView):# 局部指定版本url中版本的处理类versioning_class = URLPathVersioningdef get(self, request,*args,**kwargs):print(reqeust.version)return HttpResponse(用户列表)# api/urls.pyurlpatterns=[ur1(r'^(?P<version>[v1|v2]+)/users/$', views. Usersview. as_view()),]# 5. 使用 django rest 自动化获取 api版本 - URL path - 全局处理REST FRAMEWORK={# 全局指定版本url中版本的处理类"DEFAULT_ VERSIONING_CLASS": "rest_framework.versioning.URLPathyersioning","DEFAULT_VERSION":'v1', # 默认版本"ALLOWED_VERSIONS":['v1','v2'], # 允许的版本"VERSION_PARAM":'versio', # get参数的key}# api/views.pyclass UsersView(APIView):def get(self, request,*args,**kwargs):print(reqeust.version)return HttpResponse(用户列表)# api/urls.pyurlpatterns=[url(r'^(?P<version>[v1|v2]+)/users/$', views.Usersview.as_view()),]
使用序列化
class RolesView(APIView):def get(self, request,* args,** kwargs):roles=models.Role.objects.all().values('id",'title')roles=list(roles)# ensure_ascii 参数指定是否强制acsii编码ret=json.dumps(roles, ensure_ascii=Falsed)return HttpResponse(ret)
每个序列化器字段类构造函数至少需要这些参数。某些Field类需要附加的特定于字段的参数,但应始终接受以下内容:
