benchmark_api_view.py 文件源码

python
阅读 26 收藏 0 点赞 0 评论 0

项目:benchmark-django-rest-framework 作者: hqsh 项目源码 文件源码
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 ??
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号