Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在DRF中使用基于异步函数的视图?_Python_Django_Asynchronous_Django Rest Framework - Fatal编程技术网

Python 如何在DRF中使用基于异步函数的视图?

Python 如何在DRF中使用基于异步函数的视图?,python,django,asynchronous,django-rest-framework,Python,Django,Asynchronous,Django Rest Framework,由于Django现在支持异步视图,所以我尝试将包含大量基于函数的视图的代码库更改为异步,但由于某些原因,它不起作用 @api_view(["GET"]) async def test_async_view(request): ... data = await get_data() return Response(data) 当我向该端点发送请求时,我会收到一个错误消息: 断言错误:应为响应,HttpResponse或 HttpStreamingRes

由于Django现在支持异步视图,所以我尝试将包含大量基于函数的视图的代码库更改为异步,但由于某些原因,它不起作用

@api_view(["GET"])
async def test_async_view(request):
    ...
    data = await get_data()
    return Response(data)
当我向该端点发送请求时,我会收到一个错误消息:

断言错误:应为
响应
HttpResponse
HttpStreamingResponse
从视图返回,但收到


DRF还不支持异步视图吗?有没有其他方法可以让它正常工作?

到目前为止,DRF不支持异步“api视图”。这是DRF社区中的一个开放平台,它仍处于讨论阶段

但是,Django提供了一个装饰器/包装器,允许我们使用包装器将同步视图/函数转换为异步

例如

@sync_to_async
@api_view(["GET"])
def sample_view(request):
    data = get_data()
    return Response(data)
@sync\u to\u async
@api_视图([“获取”])
def样本_视图(请求):
数据=获取数据()
返回响应(数据)

注意,这里,
sample\u view(…)
get\u data(…)
是同步函数。

这有什么帮助?如果get_数据是同步的?正如我提到的,DRF不支持“异步API视图*。最起码的解决方法是使用
sync_to_async(…)
。这意味着
sample_视图(…)
必须是一个同步函数,因此
get_data(…)
也应该是一个同步函数。我对此也感到困惑。如果
get_data()
是大部分工作,必须同步,那么
@sync\u to\u async
可能实现什么呢?