2016-07-03 23 views
2

Ich erstelle eine REST-API mit Django Rest Framework. Die API wird große Datenmengen bereitstellen und ich möchte auf der Seite unbegrenztes Scrollen verwenden. Ich möchte Angular für das Frontend verwenden. Ich bin mir nicht sicher, wie ich die Daten so bereitstellen soll, dass nicht alle Daten einmal gesendet werden müssen, sondern nur wenn der Benutzer herunterscrollt.Verwenden von unendlichem Scrollen mit Django Rest Framework?

I Serializer Klasse bin mit -

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

Ich bin nicht sicher, wie dies zu implementieren. Sollte ich Django Endless Pagination verwenden oder könnte dies mit Hilfe der von django-rest-framework bereitgestellten Paginierung geschehen? Ich bin mir auch nicht sicher, wie das Frontend funktionieren würde. Web-Entwicklung Neuling hier, bitte helfen.

Antwort

3

Erstellen einer Unterklasse 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 

Sobald dies erledigt ist, können Sie die ersten 20 erhalten, indem die http://your_domain.com/api/v1/companies/?page=1, ?page=2 Aufruf 21. Unternehmen 40. Unternehmen geben und so weiter. (Nicht ?page= Angabe ist wie ?page=1 tun)

Auf Ihrer AngularJS Seite, Sie werden einige Variable beibehalten, die neben die Seitenzahl wird halten zu holen. Jetzt können Sie Ihre API-Anfrage entweder an Ereignis klicken, oder Sie können erkennen, ob Benutzer nach unten gescrollt hat, und dann die API-Anfrage ausführen und nächsten Satz von Company Objekte holen.

Hinweis:

Es ist nicht zwingend PageNumberPagination zu verwenden, können Sie auch LimitOffsetPagination oder CursorPagination benutzen, um Ihre Ziele zu erreichen. Lesen Sie mehr über verschiedene Paginierungsstile here

1

Sie sollten CursorPagination einen Versuch geben. Ich weiß nicht genau, ob es unendlich ist oder nicht, aber es ist definitiv für große Sets.