def paginate(self, res):
if res[SETTINGS.CODE] == SETTINGS.SUCCESS_CODE and SETTINGS.DATA_STYLE == 'dict':
if isinstance(res[SETTINGS.DATA], dict):
res[SETTINGS.DATA] = [res[SETTINGS.DATA]]
# get one
if self.get_one is None and 'pk' in self.uri_params.keys() or self.get_one:
if len(res[SETTINGS.DATA]) == 0:
res[SETTINGS.DATA] = None
else:
res[SETTINGS.DATA] = res[SETTINGS.DATA][0]
# get many in pages
elif self.page is not None:
if self.limit == 0:
page_count = 0 if self.count == 0 else 1
else:
page_count = math.ceil(self.count / self.limit)
if 1 <= self.page <= page_count:
result = res[SETTINGS.DATA]
else:
result = None
if self.page < 1:
self.page = 0
elif self.page > page_count:
self.page = page_count + 1
basic_url = 'http://' + self.host + self.path
previous_param_url = None
next_param_url = None
params = copy.deepcopy(self.params)
params[SETTINGS.LIMIT] = self.limit
params[SETTINGS.PAGE] = self.page
if self.page <= 1:
previous_url = None
else:
for key, value in params.items():
if key == 'page':
value = str(self.page - 1)
if previous_param_url is None:
previous_param_url = '?' + key + '=' + str(value)
else:
previous_param_url += '&' + key + '=' + str(value)
previous_url = basic_url + previous_param_url
if self.page >= page_count:
next_url = None
else:
for key, value in params.items():
if key == 'page':
value = str(self.page + 1)
if next_param_url is None:
next_param_url = '?' + key + '=' + str(value)
else:
next_param_url += '&' + key + '=' + str(value)
next_url = basic_url + next_param_url
res[SETTINGS.DATA] = {SETTINGS.RESULT: result, SETTINGS.COUNT: self.count,
SETTINGS.NEXT: next_url, SETTINGS.PREVIOUS: previous_url}
# get many not in pages
else:
res[SETTINGS.DATA] = {SETTINGS.RESULT: res[SETTINGS.DATA], SETTINGS.COUNT: len(res[SETTINGS.DATA])}
# ?? get ??
benchmark_api_view.py 文件源码
python
阅读 26
收藏 0
点赞 0
评论 0
评论列表
文章目录