You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django SSE视图报错:返回未等待协程而非HttpResponse对象

问题原因及解决方法

一、代码中的明显错误

先修正两处低级错误,这可能是触发报错的直接诱因:

  1. 函数名拼写错误:定义的数据库查询函数是retrievenotes,但视图中调用时写成了retrievenote,修正为:
notes = await retrievenotes('wCgS8VVO0UY8fb4mAv0A')
  1. 冗余的await关键字:f"data: {notes_str}\n\n"是普通字符串,不是协程对象,无需await修饰,直接yield即可:
yield f"data: {notes_str}\n\n"
  1. 多余的异步迭代器包装:event_stream()本身就是异步生成器,不需要额外的async_iterator_wrapper,直接传给StreamingHttpResponse即可。

修正后的完整视图代码:

@sync_to_async
def retrievenotes(id_request):
    #logging.logger.debug(f"Retrieving notes for id_request: {id_request}")
    notes = Note.objects.filter(random_id=id_request).order_by('-created_at')
    return list(notes)

@csrf_exempt
async def sse_stream(request, username):
    """
    Sends server-sent events to the client.
    """
    #logging.logger.debug("Starting sse_stream")
    async def event_stream():
        while True:
            notes = await retrievenotes('wCgS8VVO0UY8fb4mAv0A')
            notes_str = "".join([f"Note created at: {note.created_at}, Note text: {note.text}<br>" for note in notes])
            
            yield f"data: {notes_str}\n\n"
            
            await asyncio.sleep(1)

    return StreamingHttpResponse(event_stream(), content_type='text/event-stream')

二、项目配置排查(核心原因)

既然相同代码在新项目能正常运行,问题大概率出在当前项目的异步支持配置上:

1. 确保使用ASGI服务器

Django异步视图依赖ASGI环境,WSGI服务器无法正确处理异步协程:

  • 开发环境:使用Django自带的runserver(Django 3.0+默认支持ASGI),但需在settings.py中配置:
    ASGI_APPLICATION = '你的项目名.asgi.application'
    
  • 生产环境:改用Daphne、Uvicorn等ASGI服务器启动项目。

2. 排查中间件兼容性

部分中间件不支持异步处理,会导致异步视图无法正常返回响应:

  • 暂时注释settings.py中所有非必要中间件,只保留核心中间件(如SecurityMiddleware、SessionMiddleware、CommonMiddleware),测试是否恢复正常。
  • 逐个添加中间件,定位到不兼容的组件,替换为支持异步的版本,或用django.utils.decorators.sync_only_middleware包装(仅在同步请求时生效)。

3. 检查Django版本

确保当前项目使用的Django版本≥3.0,早期版本不支持异步视图。

三、额外验证步骤

  • 启动项目后,直接访问SSE接口(如/your-path/stream/),查看浏览器控制台或服务器日志是否有其他报错。
  • 先测试最简异步流式响应(比如每隔1秒返回固定字符串),确认基础异步功能正常后,再逐步添加数据库查询逻辑。

内容的提问来源于stack exchange,提问作者iulian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:00:55