page.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from collections import OrderedDict
  2. from rest_framework.exceptions import APIException
  3. from rest_framework.pagination import PageNumberPagination
  4. from rest_framework.response import Response
  5. from rest_framework.utils.urls import replace_query_param, remove_query_param
  6. from supplier.models import ListModel as supplier
  7. class MyPageNumberPaginationASNList(PageNumberPagination):
  8. page_size = 30
  9. page_size_query_param = "max_page"
  10. max_page_size = 1000
  11. page_query_param = 'page'
  12. def get_previous_link(self):
  13. if not self.page.has_previous():
  14. return None
  15. url = self.request.build_absolute_uri()
  16. page_number = self.page.previous_page_number()
  17. ssl_check = str(self.request.META.get('HTTP_ORIGIN')).split(':')[0]
  18. url_combine = str(url).split(':')
  19. if len(str(url).split(':')) == 2:
  20. url = ssl_check + ':' + url_combine[1]
  21. if page_number == 1:
  22. return remove_query_param(url, self.page_query_param)
  23. return replace_query_param(url, self.page_query_param, page_number)
  24. elif len(str(url).split(':')) == 3:
  25. url = ssl_check + ':' + url_combine[1] + ':' + url_combine[2]
  26. if page_number == 1:
  27. return remove_query_param(url, self.page_query_param)
  28. return replace_query_param(url, self.page_query_param, page_number)
  29. else:
  30. raise APIException({"detail": "Wrong API Url"})
  31. def get_next_link(self):
  32. if not self.page.has_next():
  33. return None
  34. url = self.request.build_absolute_uri()
  35. page_number = self.page.next_page_number()
  36. ssl_check = str(self.request.META.get('HTTP_ORIGIN')).split(':')[0]
  37. url_combine = str(url).split(':')
  38. if len(str(url).split(':')) == 2:
  39. url = ssl_check + ':' + url_combine[1]
  40. return replace_query_param(url, self.page_query_param, page_number)
  41. elif len(str(url).split(':')) == 3:
  42. url = ssl_check + ':' + url_combine[1] + ':' + url_combine[2]
  43. return replace_query_param(url, self.page_query_param, page_number)
  44. else:
  45. raise APIException({"detail": "Wrong API Url"})
  46. def get_paginated_response(self, data):
  47. supplier_list_data = supplier.objects.filter(openid=self.request.auth.openid, is_delete=False)
  48. supplier_list = []
  49. for i in range(len(supplier_list_data)):
  50. supplier_list.append(supplier_list_data[i].supplier_name)
  51. return Response(OrderedDict([
  52. ('supplier_list', supplier_list),
  53. ('count', self.page.paginator.count),
  54. ('next', self.get_next_link()),
  55. ('previous', self.get_previous_link()),
  56. ('results', data)
  57. ]))