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

Django的views.py中如何根据用户输入更新变量实现多轮交互

Django实现多轮对话交互的调整方案

核心问题原因

  • Python函数执行到return语句后会直接终止,你写在第一个HttpResponse后面的所有代码永远不会被执行。
  • input()是本地控制台交互函数,运行在服务端时只会等待服务端本地控制台输入,无法把输入请求传递到用户浏览器,完全不符合Web交互场景。
  • HTTP协议是无状态的,每次前端发送的AJAX请求都是独立的,后端不会自动记忆上一次对话的进度,需要主动存储会话状态。
  • 你调用HttpResponse时用逗号分隔多个内容的写法错误,HttpResponse仅接收第一个位置参数作为返回的响应内容,多内容拼接需要用字符串格式化语法。

代码调整方案

后端views.py调整

我们用Django自带的session功能存储对话进度和已收集的用户信息,按对话步骤分支处理逻辑:

import datetime
from django.http import HttpResponse

def getResponse(request):
    # 初始化会话状态:step标识对话进度,0为初始状态,1等待用户输入姓名,2等待用户输入出生年份
    if 'chat_step' not in request.session:
        request.session['chat_step'] = 0
        request.session['user_name'] = ''
    
    user_message = request.GET.get('userMessage', '').strip()
    current_step = request.session['chat_step']

    if current_step == 0:
        # 首次对话返回开场问题,进入待输入姓名阶段
        request.session['chat_step'] = 1
        return HttpResponse("Good to see you. May I know your name?")
    elif current_step == 1:
        # 接收用户输入的姓名,进入待输入出生年份阶段
        request.session['user_name'] = user_message
        request.session['chat_step'] = 2
        return HttpResponse(f"Good to know you {user_message}. I can tell you your age if you tell me which year you were born")
    elif current_step == 2:
        # 接收出生年份计算年龄,结束后重置会话状态
        try:
            birth_year = int(user_message)
            age = datetime.date.today().year - birth_year
            # 重置状态,支持用户开启新一轮对话
            del request.session['chat_step']
            del request.session['user_name']
            return HttpResponse(f"You are {age} years old")
        except ValueError:
            # 输入非法年份时提示重试,不进入下一个步骤
            return HttpResponse("Please enter a valid 4-digit birth year")

前端代码说明

你现有的AJAX交互逻辑无需修改,即可正常支持多轮对话效果,原有逻辑已经实现了输入发送、内容追加的功能,可直接运行。

额外注意事项

  • 确保Django配置中开启了session功能:默认状态下INSTALLED_APPS包含django.contrib.sessions、MIDDLEWARE包含django.contrib.sessions.middleware.SessionMiddleware即可正常使用session。
  • 如果需要支持用户刷新页面后继续未完成的对话,不要在前端清除站点Cookie即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:57:02