我是Django世界的新手,我正在尝试构建一个Django应用程序,它有两个基于函数的视图,其中一个函数/视图应该能够调用另一个视图。我尝试这样做的原因是为了减少再次编写逻辑,这在我的其他API中是可用的。
@api_view(['POST'])
def PerformActionOne(request):
result_one = PerformActionTwo(request)
result_two = DoSomethingElse(result_one)
return Response(result_two)
@api_view(['POST'])
def PerformActionTwo(request):
# Performs some calculation and returns rest_framework.response Response with some data in it
# result is a dictionary
result = Calculate()
return Response(result) 在上面的代码中,我得到了这行result_one = PerformActionTwo(request)中的一个错误
错误:异常类型: AssertionError异常值:
request参数必须是django.http.HttpRequest的实例,而不是rest_framework.request.Request。
我试着在网上查找并阅读文档,但无法找到解决方案。如果这是一个重复的问题,我很抱歉。任何关于这方面的线索都将不胜感激。
发布于 2022-03-22 11:52:08
@api_view是一个装饰器,它将基于函数的视图转换为基于类的视图(参见基于类的视图)
您实际遇到的问题的根源在于它添加了一些包装器,将传递给django.http.HttpRequest视图的参数转换为rest_framework.request.Request。这样,当您将request传递给函数PerformActionTwo时,视图无法正确地转换对象,因为它不再是django.http.HttpRequest类型了。
据我所知,如果您的主要目标是重用代码,那么您应该将PerformActionTwo函数的主体提取成一个单独的函数,而不是用@api_view来修饰它,这样您就可以从任何经过修饰的函数中调用它。
发布于 2022-10-18 19:24:02
在这一点上不确定,但django.http.HttpRequest对象可能位于_request param下的rest_framework.request.Request对象上。也许可以尝试记录request._request以查看它是什么类型的对象?
https://stackoverflow.com/questions/64220053
复制相似问题