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

如何从Django前端向服务器发送信息?ChatGPT应用开发遇阻

搭建基于Django的ChatGPT风格消息提交与展示功能

前端交互实现

先完善前端输入与提交逻辑,用AJAX实现无刷新提交文本到后端,同时更新页面消息列表:

<!-- 模板中的输入区域 -->
<div class="chat-input">
  <input type="text" id="message-input" placeholder="输入消息...">
  <button id="send-btn">发送</button>
</div>
<div class="chat-messages" id="messages-container">
  <!-- 消息列表会渲染在这里 -->
  {% for msg in message_list %}
    <div class="message">{{ msg.content }}</div>
  {% endfor %}
</div>

<script>
document.getElementById('send-btn').addEventListener('click', function() {
  const input = document.getElementById('message-input');
  const content = input.value.trim();
  if (!content) return;

  // 发送POST请求到Django后端
  fetch('/send-message/', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'X-CSRFToken': '{{ csrf_token }}'  // Django必须的CSRF令牌
    },
    body: 'content=' + encodeURIComponent(content)
  })
  .then(response => response.json())
  .then(data => {
    // 清空输入框
    input.value = '';
    // 新增用户消息到页面
    const container = document.getElementById('messages-container');
    const userMsg = document.createElement('div');
    userMsg.className = 'message user';
    userMsg.textContent = data.user_message;
    container.appendChild(userMsg);
    // 添加AI回复
    const aiMsg = document.createElement('div');
    aiMsg.className = 'message ai';
    aiMsg.textContent = data.ai_response;
    container.appendChild(aiMsg);
  });
});
</script>

Django后端配置

1. 编写视图函数

在views.py中处理消息提交,同时调用ChatGPT API生成回复:

from django.http import JsonResponse
import openai

# 建议通过环境变量存储API密钥,避免硬编码
openai.api_key = 'your-api-key'

def send_message(request):
    if request.method == 'POST':
        user_content = request.POST.get('content')
        if not user_content:
            return JsonResponse({'error': '消息不能为空'}, status=400)
        
        # 调用ChatGPT API获取回复
        try:
            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=[{"role": "user", "content": user_content}]
            )
            ai_response = response.choices[0].message['content'].strip()
        except Exception as e:
            ai_response = f"获取回复失败: {str(e)}"
        
        # 返回用户消息和AI回复
        return JsonResponse({
            'user_message': user_content,
            'ai_response': ai_response
        })
    return JsonResponse({'error': '请求方法错误'}, status=405)

2. 配置URL路由

在urls.py中添加路由映射:

from django.urls import path
from . import views

urlpatterns = [
    # 其他路由...
    path('send-message/', views.send_message, name='send_message'),
]

模板渲染修正

你原来的模板标签存在空格错误,Django模板标签{% %}和{{ }}内部不能有多余空格,正确的循环写法:

{% for msg in message_list %}
  <div class="message">{{ msg }}</div>
{% endfor %}

如果需要持久化聊天记录,可以创建Message模型,将用户消息和AI回复保存到数据库,再通过视图查询所有消息传递给模板渲染。

调试注意事项

  • 确保CSRF令牌正确传递,避免403权限错误
  • 先测试无API调用的模拟回复,确认前后端交互正常后再接入ChatGPT API
  • 可通过CSS区分用户消息和AI回复的样式,提升交互体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:03:18