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