首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将带数据的Django Rest框架请求对象转换为Django HttpRequest对象?

如何将带数据的Django Rest框架请求对象转换为Django HttpRequest对象?
EN

Stack Overflow用户
提问于 2020-10-06 05:51:36
回答 2查看 529关注 0票数 2

我是Django世界的新手,我正在尝试构建一个Django应用程序,它有两个基于函数的视图,其中一个函数/视图应该能够调用另一个视图。我尝试这样做的原因是为了减少再次编写逻辑,这在我的其他API中是可用的。

代码语言:javascript
复制
@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

我试着在网上查找并阅读文档,但无法找到解决方案。如果这是一个重复的问题,我很抱歉。任何关于这方面的线索都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2022-03-22 11:52:08

@api_view是一个装饰器,它将基于函数的视图转换为基于类的视图(参见基于类的视图)

您实际遇到的问题的根源在于它添加了一些包装器,将传递给django.http.HttpRequest视图的参数转换为rest_framework.request.Request。这样,当您将request传递给函数PerformActionTwo时,视图无法正确地转换对象,因为它不再是django.http.HttpRequest类型了。

据我所知,如果您的主要目标是重用代码,那么您应该将PerformActionTwo函数的主体提取成一个单独的函数,而不是用@api_view来修饰它,这样您就可以从任何经过修饰的函数中调用它。

票数 1
EN

Stack Overflow用户

发布于 2022-10-18 19:24:02

在这一点上不确定,但django.http.HttpRequest对象可能位于_request param下的rest_framework.request.Request对象上。也许可以尝试记录request._request以查看它是什么类型的对象?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64220053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档