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

Django聊天机器人开发中无法获取用户输入的问题求助

问题解决:无法获取Django表单中的用户输入

核心问题分析

你遇到的{'rawText': None}问题,根源有三个:

  • 请求方式不匹配:表单用method="POST"提交,但你用request.GET.get()获取参数——GET是从URL提取参数,POST请求的参数存在request.POST对象中。
  • 字段名错误:你的表单字段定义是message(在messageForm类中),但你尝试获取textInput,和实际表单字段名不符。
  • 变量未初始化:只有POST请求时才定义context,GET请求时print(context)会抛出未定义错误,同时模板也无法拿到该变量。

修改后的代码实现

views.py

from django.shortcuts import render
from .forms import messageForm
from .main import get_weather, take_user_input

def home(request):
    # 初始化聊天记录,默认包含机器人初始消息
    chat_history = [{"sender": "bot", "text": "Hi! Let's get to chatting."}]
    
    if request.method == "POST":
        # 绑定POST数据到表单,完成验证
        form = messageForm(request.POST)
        if form.is_valid():
            # 从表单清洗后的数据中获取用户输入
            user_input = form.cleaned_data['message']
            chat_history.append({"sender": "user", "text": user_input})
            
            # 调用自定义模块处理输入,生成机器人回复
            bot_response = take_user_input(user_input)
            chat_history.append({"sender": "bot", "text": bot_response})
    else:
        # GET请求时初始化空表单
        form = messageForm()
    
    # 将聊天记录和表单传入模板
    return render(request, 'home.html', {'form': form, 'chat_history': chat_history})

home.html

修改模板,循环渲染聊天记录,同时保留原有表单结构:

{% extends 'base.html'%}
{% load static %}

{% block content %}
    <h2>Blue's Chatbot</h2>
    <div id="chatbox">
        {% for message in chat_history %}
            {% if message.sender == 'bot' %}
                <p class="botText"><span>{{ message.text }}</span></p>
            {% else %}
                <p class="userText"><span>{{ message.text }}</span></p>
            {% endif %}
        {% endfor %}
    </div>
    <div id="userInput">
        <form method="POST" novalidate>
            {% csrf_token %}
            {{ form }}
            <input id="buttonInput" type="submit" value="Send">
        </form>
    </div>
{% endblock %}

后续优化建议(实现无刷新即时通讯)

当前代码提交表单会刷新页面,要实现类似即时通讯的流畅体验,需要用AJAX提交请求:

  1. 给表单添加ID,编写JavaScript监听表单提交事件,阻止默认页面刷新行为。
  2. 用fetch或原生XMLHttpRequest发送POST请求,携带CSRF令牌和用户输入内容。
  3. 后端新增一个API视图专门处理AJAX请求,返回JSON格式的机器人回复。
  4. 前端收到回复后,动态将用户输入和机器人回复追加到chatbox中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:57:20