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 BaseVersioning
class ParamVersion(object):
def determine_version(self, request,* args,** kwargs):
# 获取url中get的参数
version=request.query_params.get('version')
return version
class UsersView(APIView):
versioning_class = ParamVersion
def 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 QueryParameterVersioning
class UsersView(APIView):
versioning_class =QueryParameterVersioning
def 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 URLPathVersioning
class UsersView(APIView):
# 局部指定版本url中版本的处理类
versioning_class = URLPathVersioning
def get(self, request,*args,**kwargs):
print(reqeust.version)
return HttpResponse(用户列表)
# api/urls.py
urlpatterns=[
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.py
class UsersView(APIView):
def get(self, request,*args,**kwargs):
print(reqeust.version)
return HttpResponse(用户列表)
# api/urls.py
urlpatterns=[
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类需要附加的特定于字段的参数,但应始终接受以下内容: