gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:49:00 27 4
gpt4 key购买 nike

我使用序列化程序、 View 集和路由器创建了一个 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 中)

有没有更好的方法,比如直接调用 View 集类并从那里获取数据?

非常感谢!

最佳答案

在同一个应用程序中调用 API 端点不是一个好的做法。

一个选项是直接调用您的 View 集方法,如 https://stackoverflow.com/a/51149806/290036

我推荐的另一种方法是为您的 API 和 View 使用相同的代码库。

def get_avaialble_items():
items = Item.objects.filter(available=True)
...
return items

# Use get_avaialble_items both in ItemViewSet and ProductListView

关于python - Django - 在views.py内部使用我自己的REST API的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60529072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com