Получите разделенную на DRF конечную точку от axios - PullRequest
0 голосов
/ 14 декабря 2018

В моем django-rest-framework API есть разбитая на страницы конечная точка.Ответ на запрос GET списка выглядит следующим образом:

{
"count": 161,
"next": "http://localhost:8000/api/v2/bars/?limit=50&offset=50",
"previous": null,
"results": [
    {
        "id": 1,
        "name": "Bar1",
        "url": "http://localhost:8000/api/v2/bars/1/",
        "budget": 800000,
    },
    // more items...
]
}

Каков наилучший подход, если я хочу получить от axios все эти страницы до конца, а затем вывести его в мое состояние vuex?

Мой текущий код получает только первую страницу.axios запрос сеанса:

bars() { return session.get('/bars/') }

Действие vuex:

barsRefresh(context) {
    api.bars().then((data) => context.commit('setBars', data.results))
}

1 Ответ

0 голосов
/ 18 декабря 2018

Основываясь на этом ответе, я создал фабрику, которая получает URL и возвращает рабочую функцию:

// returns a promise once it gets ALL pages from API
function paginated_factory(url) {
    return function paginatedFetcher(next, obj_list = []) {
        return session.get(next ? next : url)
            .then(({data}) => {
                obj_list.push(...data.results)
                if (!data.next) return obj_list
                return paginatedFetcher(data.next, obj_list)
            })
    }
}

Затем моя функция модуля API:

bars: paginated_factory('/bars/')

И мое vuex действие:

barsRefresh(context) {
    api.bars().then((data) => context.commit('setBars', data))
},
...