视图未返回 HttpResponse 对象。相反,它返回了一个未等待的协程。您可能需要在视图中添加“等待”

问题描述 投票:0回答:1

Python:3.8 Django:3.2。

我正在按照本文构建一个 django 应用程序(错误:您的视图返回一个 HttpResponse 对象。它返回一个未等待的协程。您可能需要在视图中添加一个“等待”

这是我的代码:

import asyncio

这就是景色

async def get_smokables():
    print("Getting smokeables...")
    await asyncio.sleep(2)

async def save_setting(request):
   await asyncio.gather(*[get_smokables()])
   return HttpResponse('ok')

运行命令:

uvicorn config.asgi:application --reload

当我尝试上面的代码时,它说“视图views.save_setting没有返回HttpResponse对象。它返回了一个未等待的协程。您可能需要在视图中添加一个'await'。”

django asynchronous
1个回答
0
投票

就我而言,我遇到了这个错误,我将其跟踪到以下内容:

class MyView(adrf.APIView):
  async def dispatch(req, *args, **kwargs):
     ...
     return super().dispatch(req, *args, **kwargs)

事实证明 super() 方法也是异步的,因此在返回之前需要等待。例如。更改为

return await super()...
修复了它。

当然,此错误的每种情况都会略有不同,但我建议使用调试器进行查看,看看哪个函数调用会触发错误。该函数可能返回一个协程,而应该等待协程并返回其结果。

© www.soinside.com 2019 - 2024. All rights reserved.