【发布时间】:2019-08-13 07:36:24
【问题描述】:
我对如何在我的应用程序中调用我自己的 API 有一些问题和疑问。
所以我有一个可以向其发送数据的 API。我想在不同的视图中做的是调用这个发送的数据,这样我就可以在模板中可视化它。
首先,我尝试使用视图内的库请求调用 API。即使这可行,我在身份验证方面也遇到了问题。所以我想我可以从基于自定义函数的视图中调用基于类的 API 视图。
但我不知道这是否可行,也不知道这是否值得推荐。我还想用javascript来做这件事可能会更好?我不知道....所以我的问题是双重的:
a) 从我自己的应用中调用 API 视图/获取 API 数据以便我可以对其进行操作和可视化的最佳做法是什么
b) 如果这是一种好的做法,我如何从基于自定义函数的视图中调用基于类的通用 API 视图?
这是我目前正在尝试的:
my generic view
class BuildingGroupRetrieveAPIView(RetrieveAPIView):
"""Retrieve detail view API.
Display all information on a single BuildingGroup object with a specific ID.
"""
authentication_classes = [JSONWebTokenAuthentication, SessionAuthentication, BasicAuthentication]
serializer_class = BuildingGroupSerializer
queryset = BuildingGroup.objects.all()
我尝试调用它的基于函数的视图:
def visualize_buildings(request, id):
returned_view = BuildingGroupRetrieveAPIView.as_view()
return returned_view
my url
path('data/<int:pk>/', BuildingGroupRetrieveAPIView.as_view(),
name="detail_buildings_api"),
当我调用基于类的视图时,我得到AttributeError: 'function' object has no attribute 'get'
非常感谢您的帮助!提前致谢!
【问题讨论】:
-
确实没有必要发出实际的 HTTP 请求来获取您的数据,但我无法理解您在
visualize_buildings中所做的事情。您似乎只是在调用 API 视图并返回它;重点是什么?为什么不删除该函数,直接访问 BuildingGroupRetrieveAPIView URL? -
现在我只是想退货,你说得对。但这不起作用,因此编写更多代码没有意义。我的想法实际上是,当我设法从 api 获取数据时,我可以对其进行修改并将其传递给我的模板,然后我可以将其可视化......
-
好的,但是什么“不起作用”?发生什么了?请注意,
as_view()返回一个视图,即您必须调用的 callable:return returned_view(request, pk). -
是的,我的错我应该补充一下(我更新了我的问题)。它告诉我
AttributeError: 'function' object has no attribute 'get'。但是等一下,我会试试你的建议 -
好的,你需要一个 kwarg,所以试试
return returned_view(request, pk=id)
标签: django django-rest-framework django-views django-class-based-views