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

基于Django开发问答系统的技术疑问:会话与WebSocket使用咨询

嘿,针对你用Django开发问答系统的两个疑问,我来给你捋捋:

1. 未认证用户能不能用Session?

当然可以!Django默认就支持给未认证用户启用Session,不用额外做复杂配置(除非你手动在settings.py里关了Session中间件)。

你完全可以用Session来存储用户的问答历史——比如把已提出的问题ID和用户的对应回答存在一个列表或字典里,示例代码大概是这样:

from django.utils import timezone

def process_answer(request):
    # 从Session里获取历史问答记录,没有的话初始化一个空列表
    qa_history = request.session.get('qa_history', [])
    
    # 假设你从请求里拿到当前问题ID和用户输入的回答
    current_q_id = request.POST.get('question_id')
    user_answer = request.POST.get('user_answer')
    
    # 把新的问答记录加入历史
    qa_history.append({
        'question_id': current_q_id,
        'answer': user_answer,
        'timestamp': timezone.now().isoformat()
    })
    
    # 一定要保存Session的修改
    request.session['qa_history'] = qa_history
    
    # 接下来从本体里获取下一个问题的逻辑
    next_question = get_next_question_from_ontology(qa_history)
    
    # 返回包含下一个问题和历史记录的页面/响应
    return render(request, 'next_question.html', {
        'next_question': next_question,
        'qa_history': qa_history
    })

Django会自动给未认证用户生成一个sessionid存在浏览器Cookie里,只要用户不清除Cookie,会话就会保留,完全能满足你展示历史问答的需求。这个方案对新手来说非常友好,不用搞用户认证那一套,先把核心功能跑起来再说。

2. 要不要用Django Channels/WebSocket?

这个得看你的具体交互需求:

  • 如果你的流程是用户提交回答→服务器处理→返回下一个问题这种传统的请求-响应模式,那完全不需要WebSocket!用普通的Django视图(配合AJAX异步更新页面也行)就足够了,这种方案简单易维护,对你这个新手来说学习成本低得多。
  • 只有当你需要实时双向通信场景的时候才需要Channels——比如系统要主动给用户推送消息(比如突然触发一个紧急问题)、多用户实时协作问答等。但你的需求是“根据用户回答推送下一个问题”,这是典型的用户触发后的被动响应,用普通HTTP就能搞定,没必要引入Channels增加复杂度。

小建议

先从最简单的方案入手:用Session存历史问答,用普通视图处理问答流程,等核心功能跑通、稳定了,再考虑优化(比如担心用户清除Cookie丢失历史的话,可以加个可选的匿名标识输入,或者引导用户注册登录,但初期不用急)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:22:49