02 API版本

获取api版本

  1. # 在URL的get方法中传参,version
  2. # 1. 手工获取API版本
  3. class UsersView(APIView):
  4. def get(self, request,*args,**kwargs):
  5. # 1. 使用原生 requets
  6. # version = request._reqeust.GET.get('version')
  7. # print(version)
  8. # 2. 使用 django rest 封装后的
  9. version=request.query_params.get('version')
  10. print(version)
  11. return HttpResponse(用户列表)
  12. # 2.使用 django rest 自动化获取 api版本 - 自定义
  13. from rest_framework.versioning import BaseVersioning
  14. class ParamVersion(object):
  15. def determine_version(self, request,* args,** kwargs):
  16. # 获取url中get的参数
  17. version=request.query_params.get('version')
  18. return version
  19. class UsersView(APIView):
  20. versioning_class = ParamVersion
  21. def get(self, request,*args,**kwargs):
  22. # 2. 使用 django rest 封装后的
  23. # version=request.query_params.get('version')
  24. # print(version)
  25. print(reqeust.version)
  26. return HttpResponse(用户列表)
  27. # 3. 使用 django rest 自动化获取 api版本 - get参数
  28. from rest_framework.versioning import QueryParameterVersioning
  29. class UsersView(APIView):
  30. versioning_class =QueryParameterVersioning
  31. def get(self, request,*args,**kwargs):
  32. print(reqeust.version)
  33. return HttpResponse(用户列表)
  34. # 可以在配置文件中配置相关的三个配置
  35. REST FRAMEWORK={
  36. "DEFAULT_VERSION":'v1', # 默认版本
  37. "ALLOWED_VERSIONS":['v1','v2'], # 允许的版本
  38. "VERSION_PARAM":'versio', # get参数的key
  39. }
  40. # 在URL的path中使用版本号
  41. # 4. 使用 django rest 自动化获取 api版本 - URL path - 局部处理
  42. from rest_framework.versioning import URLPathVersioning
  43. class UsersView(APIView):
  44. # 局部指定版本url中版本的处理类
  45. versioning_class = URLPathVersioning
  46. def get(self, request,*args,**kwargs):
  47. print(reqeust.version)
  48. return HttpResponse(用户列表)
  49. # api/urls.py
  50. urlpatterns=[
  51. ur1(r'^(?P<version>[v1|v2]+)/users/$', views. Usersview. as_view()),
  52. ]
  53. # 5. 使用 django rest 自动化获取 api版本 - URL path - 全局处理
  54. REST FRAMEWORK={
  55. # 全局指定版本url中版本的处理类
  56. "DEFAULT_ VERSIONING_CLASS": "rest_framework.versioning.URLPathyersioning",
  57. "DEFAULT_VERSION":'v1', # 默认版本
  58. "ALLOWED_VERSIONS":['v1','v2'], # 允许的版本
  59. "VERSION_PARAM":'versio', # get参数的key
  60. }
  61. # api/views.py
  62. class UsersView(APIView):
  63. def get(self, request,*args,**kwargs):
  64. print(reqeust.version)
  65. return HttpResponse(用户列表)
  66. # api/urls.py
  67. urlpatterns=[
  68. url(r'^(?P<version>[v1|v2]+)/users/$', views.Usersview.as_view()),
  69. ]

使用序列化

  1. class RolesView(APIView):
  2. def get(self, request,* args,** kwargs):
  3. roles=models.Role.objects.all().values('id",'title')
  4. roles=list(roles)
  5. # ensure_ascii 参数指定是否强制acsii编码
  6. ret=json.dumps(roles, ensure_ascii=Falsed)
  7. return HttpResponse(ret)

每个序列化器字段类构造函数至少需要这些参数。某些Field类需要附加的特定于字段的参数,但应始终接受以下内容: