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'。”
就我而言,我遇到了这个错误,我将其跟踪到以下内容:
class MyView(adrf.APIView):
async def dispatch(req, *args, **kwargs):
...
return super().dispatch(req, *args, **kwargs)
事实证明 super() 方法也是异步的,因此在返回之前需要等待。例如。更改为
return await super()...
修复了它。
当然,此错误的每种情况都会略有不同,但我建议使用调试器进行查看,看看哪个函数调用会触发错误。该函数可能返回一个协程,而应该等待协程并返回其结果。