由于Django现在支持异步视图,我尝试改变我的代码库,其中包含了很多基于函数的视图是异步的,但由于某些原因它不工作。
@api_view(["GET"])
async def test_async_view(request):
...
data = await get_data()
return Response(data)
当我向此端点发送请求时,收到一条错误消息,内容如下:
Assert错误:应从视图返回Response
、HttpResponse
或HttpStreamingResponse
,但收到的却是<class 'coroutine'>
DRF还不支持异步视图吗?有没有别的方法可以让它工作?
3条答案
按热度按时间6qqygrtg1#
到目前为止,DRF还不支持async “API视图”。这里是DRF社区中的一个开放的issue (#7260),它仍处于讨论阶段。
但是,Django提供了一个装饰器/ Package 器,允许我们使用**
sync_to_async(...)
** Package 器将同步视图/函数转换为异步。例如,
注意,这里,
sample_view(...)
和get_data(...)
是同步函数。nukf8bse2#
我想你可以在DRF中使用这个装饰器
用法示例
1rhkuytd3#
您可以使用
adrf
执行此操作:然后添加到INSTALLED_APPS
x一个一个一个一个x一个一个二个x