Я создал Django REST API с использованием сериализаторов, наборов представлений и маршрутизаторов. Мои конечные точки выглядят примерно так:
http://www.website.com/api/items
http://www.website.com/api/items/available
serializer.py (без импорта)
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = '__all__'
viewsets.py (без импорта)
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
@action(methods=['GET'], detail=False)
def most_expensive(self, request):
query = self.get_queryset().order_by('price').last()
serialized = self.serializer_class(query)
return Response(serialized.data)
сейчас Я хочу получить доступ к этому API из моего views.py для рендеринга HTML с доступными элементами: так я сейчас и делаю:
views.py (без импорта)
class ProductListView(View):
template = 'store/product_list.html'
def get(self, request):
items = requests.get('http://127.0.0.1:8000/api/items/available')
context = {'items': items}
return render(request, self.template, context=context)
При использовании модулей запросов у меня возникло несколько проблем, после измерения я заметил, что для этого запроса задержка составляет 0,015 секунды и до go, и если я когда-либо изменю конечную точку API, мне придется настроить ее здесь так как он жестко запрограммирован.
Я могу получить свои предметы, используя:
Item.objects.filter(available=True)
Что дает мне результат почти мгновенно, но я пишу все запросы дважды (один раз в моем API и один раз в моем views.py)
Есть ли лучший способ сделать это, например, вызвать класс viewset напрямую и получить оттуда данные?
Большое спасибо!