Как-то долго не мог понять как же мне подобраться к каталогу товаров. С чего начать?! Вот так вот каждый пункт этого интернет магазина. Но я начал входить в курс дела и понимать что же требуется по документации swagger. Чтобы получить список товаров нам нужно чтобы обработчик конечной точки /api/catalog вернул Response со словарем вот такого типа:
Ну, думаю, ок! Ща создам класс, в классе словарь с похожими данными, и отправлю этот словарь в Response(data). И по идее у меня должнен появиться один продукт (товар) на странице каталога. Сказано - сделано:
Попробовал отправить подобные данные через обработчик эндпойнта /api/catalog и о чудо, они появились на странице каталога:
Только с фотографией вышел косяк и она не отобразилась, но главное что тест пройден, я понял основной принцип того как будет это работать. Осталось дело за малым - настроить сортировку, пагинацию (постраничный вывод товаров). Чем далее я и займусь.
Итак, самое простое - это сделать запрос всех продуктов (их у меня пока только один, но я создам еще несколько) и эти продукты преобразовать в формат который нужен шаблону фронт-энда, для построения списка продуктов. И вот что у меня получилось:
И эта красота создает на странице каталога вот это:
Продукты, с картинками уже отображаются на странице каталога. Теперь нужно сделать так чтобы заработали все фильтры. Посмотрим как это делается...
Мы можем отсортировать полученные данные из базы данных путем изготовления функции для сортировки, и это будет работать, но это не дело сортировать уже полученную из базы данных ВСЮ!!! информацию. Одно дело когда у меня в БД 5, 10, ну сто товаров, а если их будет много сотен тысяч и каждый раз мы будем делать запрос типа Products.objects.all() и получать в ответ всю базу?! Неее, сия тем годится лишь для проверки работоспособности кода, что все работает и фильтруется, сортируется. Но при больших данных надо делать нечто другое.
Завтра займусь работой над фильтром. А на сегодня я могу отфильтровать все данные полученные из базы данных и разбить их на страницы. Это практически рабочая конструкция, но возможно еще кардинально будет дорабатываться. Итак, что же происходит когда мы вводим адрес http://127.0.0.1:8000/catalog/
Делается запрос в БД и вытаскиваются все записи, которые сортируются и разбиваются на страцицы:
И вот что мы получаем на странице нашего магазина:
У меня в базе данных всего 5 товаров, и не составляет труда брать выбоку их ВСЕХ, а потом уже фильтровать сортировать. Но надо сделать так чтобы посылался запрос в базу данных с учетом всех фильтров, и выдавался лишь список тех объектов, что указаны в запросе.
Так что, продолжение следует...