我在如何在应用程序中调用自己的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'
非常感谢您的帮助!预先感谢!
答案 0 :(得分:1)
如果要声明CBV的URL,为了方便起见,您可以在其文件内部声明后调用CBV。
views.py
class BuildingGroupRetrieveAPIView(RetrieveAPIView):
.....
visualize_buildings = BuildingGroupRetrieveAPIView.as_view()
然后在您的URL上使用该名称。
urls.py
from . import views
path('data/<int:pk>/', views.visualize_buildings, name="detail_buildings_api"),
答案 1 :(得分:0)
正确的方法:
from django.url import reverse, resolve
def get_view_func(name_of_your_view):
return resolve(reverse(name_of_your_view)).func
# if your are in a drf view:
get_view_func()(request._request)
# if you are in normal django view:
get_view_func()(request)