Django-在views.py内部使用我自己的REST API的正确方法?

问题描述 投票:0回答:1

我使用序列化程序,视图集和路由器创建了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)

现在,我希望能够从views.py访问此API,以使用可用项呈现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秒,如果我更改了API端点,则由于硬编码而不得不在这里进行调整。] >

我可以使用以下方式获取我的物品:

Item.objects.filter(available=True)

这几乎立即给了我结果,但是我编写了所有查询两次(一次在我的API中,一次在我的views.py中)

是否有更好的方法,例如直接调用viewset类并从那里获取数据?

非常感谢!

我使用序列化程序,视图集和路由器创建了Django REST API。我的终点看起来像这样:http://www.website.com/api/items http://www.website.com/api/items/available serializer ....

python django python-3.x
1个回答
0
投票
在同一应用程序中调用API端点不被认为是一种好习惯。
© www.soinside.com 2019 - 2024. All rights reserved.