[FIXED] Das Erstellen einer Funktion zum Aufrufen von API für die Paginierung ruft den doppelten Wert int auf

Ausgabe

Ich baue eine einfache App in reactund djangoauf die ich APIim Backend zugreife und paginiere.

Das Problem ist, dass ich zum Beispiel zwei Aufrufe pro Seitenklick tätigen möchte – Wenn der Benutzer auf Seite 1 geklickt hat, versuche ich, einen API-Aufruf mit page &page=1und zu tätigen &page=2. Und wenn der Benutzer auf Seite 2 geklickt hat, dann API-Aufruf machen &page=3und &page=4und Wenn der Benutzer auf Seite 3 geklickt hat, dann API-Aufruf machen &page=5und&page=6

Aber das Problem ist, dass, wenn der Benutzer auf der Seite 1stist, er feine API-Aufrufe (Seite 1 und 2) macht, aber wenn der Benutzer auf Seite 2 wechselt, dann ruft er api mit &page=2und &page=3anstelle von &page=3und auf &page=4.

Ich möchte api für die nächsten zwei Seiten aufrufen.

Ansichten.py

class MakeApiCall(APIView):

    def get(self, *args, **kwargs):
        current_page = self.request.query_params.get('current_page')
        current_page = int(current_page)

        for index in range(2):
            url = "https://api.punkapi.com/v2/beers?page=" + str(current_page)
            call_api = requests.get(url)
            print(call_api.url)
            current_page += 1

Wenn ich die obige Funktion mit current_page = 1 ausführe, ruft sie api mit page=1und auf page=2, aber wenn ich current_page = 2 aufrufe, ruft sie erneut mit page=2und page=3nicht page=3und aufpage=4

Ich habe eine While-Schleife nur dafür erstellt, aber sie funktioniert genauso wie diese Bereichsfunktion.

Jede Seite kehrt zurück 25 results, also stoppe ich die Schleife, wenn Array 50 Elemente hat, aber es funktioniert immer noch genauso wie die folgende Funktion

    results = []

    while len(results) != 50:
        url = "https://api.punkapi.com/v2/beers?page=" + str(current_page)
        call_api = requests.get(url)
        for result in api_results.json():
            if len(results) < 50:
                results.append(result)
            else:
                break

Aber es ruft die API immer noch auf die gleiche Weise auf.

Ich mochte die whileMethode, es wäre am besten, aber es funktioniert nicht.

Frontend ist in Ordnung, aber wenn Sie es brauchen, lassen Sie es mich bitte wissen

Lösung

Es sieht so aus, als ob indexes in der forSchleife nicht verwendet wird, um die entsprechenden Seiten abzurufen. Stattdessen rufen Sie die aktuelle Seite und die nächste Seite ab, was das Verhalten ist, das Sie beobachtet haben. In der whileSchleife current_pagewird 50 mal geholt, ohne Inkrementierung.

Wir können eine einfache Formel verwenden, um den Startindex der Schleife zu bestimmen: current_page * 2 - 1(Sie können manuell überprüfen, ob dies für die Fälle funktioniert, in denen current_page1, 2, 3 usw. ist).

(Die Formel funktioniert, weil Sie bei jedem Aufruf der API ein Seitenpaar abrufen, beginnend mit der ungeraden Seite.)

Das bedeutet, dass die Einschleifung views.pywie folgt aussehen sollte:

...

for i in range(2):
    start_index = current_page * 2 - 1
    url = "https://api.punkapi.com/v2/beers?page=" + str(start_index + i)
    call_api = requests.get(url)
    print(call_api.url)


Beantwortet von –
Itai Steinherz


Antwort geprüft von –
Terry (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like