python - 在 Django Rest Framework 中使用无限滚动?

标签 python django rest django-rest-framework infinite-scroll

我正在使用 Django Rest Framework 创建 REST API。 API 将提供大量数据,我想在页面上使用无限滚动。我想在前端使用 Angular。我不确定如何提供数据,以便不是所有数据都必须发送一次,而是仅当用户向下滚动时才发送。

我正在使用序列化器类 -

class CompanySerializer(serializers.ModelSerializer):
    class Meta:
        model = Company
        fields = ('company_name', 'location', 'founded_year')

我不确定如何实现它。我应该使用 Django Endless Pagination 还是可以使用 django-rest-framework 提供的分页来完成。我也不确定前端如何工作。 Web 开发新手,请帮忙。

最佳答案

创建一个ListAPIView子类

from rest_framework import pagination, generics

class CompanyPagination(pagination.PageNumberPagination):
    page_size = 20  # the no. of company objects you want to send in one go

# Assume url for this view is /api/v1/companies/
class CompanyListView(generics.ListAPIView):
    queryset = Company.objects.all()
    serializer_class = CompanySerializer
    pagination_class = CompanyPagination

完成此操作后,您可以通过调用 http://your_domain.com/api/v1/companies/?page=1 获取前 20 个, ?page=2 会将第 21 家公司分配给第 40 家公司,依此类推。 (不指定 ?page= 就像做 ?page=1)

在您的 AngularJS 端,您将维护一些变量,该变量将保存下一个要获取的页码。现在您可以将您的 API 请求绑定(bind)到某些加载更多 类型按钮上的点击事件,或者您可以检测用户是否已滚动到底部,然后执行 API 请求并获取下一组Company 对象。

注意:

PageNumberPagination 不是强制性的,您甚至可以使用 LimitOffsetPaginationCursorPagination 来实现您的目标。阅读有关各种分页样式的更多信息 here

关于python - 在 Django Rest Framework 中使用无限滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38173984/

相关文章:

python - dct 中的断言失败(类型 == CV_32FC1 || 类型 == CV_64FC1)

python - 如果我使用 mod_wsgi 来提供应用程序,在哪里可以看到标准输出?

django - 重用 Django Rest Framework 嵌套序列化器中的现有对象

django - 如何使用 "include"标签在 Django 中动态包含模板

python - Django 模型继承 : ForeignKey on parent, 没有对子模型的 related_name 访问

java - Unknown entity class 错误消息,即使该实体标有@Entity 注解

python - Pandas DataFrame 浮点格式

java - Gzip apache Camel 请求休息

android - 开发过程中在android中调用REST API

python - 使用 Scikit-Learn 生成高维数据集