2013-07-12 9 views
7

Qual è il modo migliore per limitare gli articoli per pagina in Django REST Framework? Ho impostato PAGINATE_BY = 20 e PAGINATE_BY_PARAM. Senza parametro si ottengono 20 voci, ma è anche possibile ottenere 4000 articoli oltre il parametro paginato. Queste richieste sono molto pesanti e poco utili ma perfette per i copioni.Elementi limite per pagina in Django REST Framework

Jarus

risposta

5

Se si desidera impostare un limite massimo rigido, ignorare il metodo get_paginate_by nelle viste generiche.

+0

Non è la soluzione più pulita ma funziona bene. – Jarus

+0

Siete invitati a inviare una richiesta di pull per l'impostazione MAX_PAGINATE_BY. –

5

È necessario impostare PAGINATE_BY come doc stati:

PAGINATE_BY: il formato pagina predefinito da utilizzare per l'impaginazione. Se impostato su None, l'impaginazione è disabilitato per default

PAGINATE_BY_PARAM è per gli utenti per ignorare la dimensione predefinita. Quindi se hai paura del suo abuso, non abilitarlo.

PAGINATE_BY_PARAM: il nome di un parametro di query, che può essere utilizzato da client di ignorare la dimensione della pagina predefinita da utilizzare per l'impaginazione. Se impostato su Nessuno, i client non possono sovrascrivere la dimensione della pagina predefinita.

+0

Si noti che '' PAGINATE_BY' e PAGINATE_BY_PARAM' sono ora in attesa di ammortamento: http://www.django-rest-framework.org/api-guide/generic-views/ – Tristan

3

Impostare 'MAX_PAGINATE_BY' per configurare globale risultati massimi per pagina, come gli stati doc.

Esempio dal doc:

REST_FRAMEWORK = { 
    'PAGINATE_BY': 10,     # Default to 10 
    'PAGINATE_BY_PARAM': 'page_size', # Allow client to override, using `?page_size=xxx`. 
    'MAX_PAGINATE_BY': 100    # Maximum limit allowed when using `?page_size=xxx`. 
} 

Impostare max_paginate_by per configurare su una baseper-view per un limite massimo di duro per pagina.

Esempio dal doc:

class PaginatedListView(ListAPIView): 
    queryset = ExampleModel.objects.all() 
    serializer_class = ExampleModelSerializer 
    paginate_by = 10 
    paginate_by_param = 'page_size' 
    # Set MAX results per page 
    max_paginate_by = 100 
3

meglio passare attraverso Pagination

La classe PageNumberPagination comprende una serie di attributes che possono essere sovrascritta per modificare lo stile di impaginazione.

class ItemSetPagination(PageNumberPagination): 
    page_size = 1000 
    page_size_query_param = 'page_size' 
    max_page_size = 10000 

pagination_class = ItemSetPagination 
Problemi correlati