2016-07-03 5 views
2

私はDjango Rest Frameworkを使用してREST APIを作成しています。 APIは大量のデータを処理し、ページ上で無限のスクロールを使用したいと考えています。フロントエンドにAngularを使用したいと思います。私は、すべてのデータを一度だけ送信する必要はなく、ユーザーがスクロールダウンしたときだけデータを提供する方法についてはわかりません。Django Rest Frameworkで無限スクロールを使用していますか?

私は、シリアライザクラスを使用しています -

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

私はこれを実装する方法について確認していません。 Django Endless Paginationを使用すべきか、django-rest-frameworkが提供するページネーションを使用して行うことができますか?私はまた、このフロントエンドがどのように機能するかについてもわかりません。 Web開発初心者は、ここで助けてください。

答えて

3

これが完了すると、あなたがhttp://your_domain.com/api/v1/companies/?page=1を呼び出すことにより、最初の20を得ることができ、?page=2はそうで第40回会社に21の会社を与えるとします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 

を作成します。 (?page=を指定しないと?page=1と同じです)

AngularJSでは、次にフェッチするページ番号を保持する変数を保持します。 APIリクエストをのボタンのいずれかのクリックイベントにバインドすることができます。タイプのボタンをクリックするか、ユーザーが下にスクロールしたかどうかを検出してAPIリクエストを行い、Companyオブジェクトの次のセットを取得できます。

注:

あなたもあなたの目的を達成するためにLimitOffsetPaginationCursorPaginationを使用することができ、PageNumberPaginationを使用する義務はありません。さまざまなページ設定スタイルの詳細を読むhere

1

CursorPaginationを試してください。 私はそれが無限であるかどうかは正確にはわかりませんが、それは巨大なセットにはっきりとあります。

関連する問題