基于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
相关产品推荐
相关产品推荐

