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

使用Axios向Django后端POST字符串数据但后端接收为空的问题求助

使用Axios向Django后端POST字符串数据但后端接收为空的问题求助

嘿,我来帮你搞定这个问题!从你贴的代码和日志来看,主要有两个小问题导致后端拿到空数据,咱们一步步来修复:

第一个问题:误处理了浏览器的OPTIONS预检请求

你日志里的OPTIONS /chatbot/rest_handler是浏览器发送的跨域预检请求,这个请求本身没有请求体,而你的视图没有判断请求方法,直接处理了这个OPTIONS请求,所以你看到的空QUESTION:其实是这个预检请求的输出,不是你实际发送的POST请求的内容。

第二个问题:后端解析JSON数据的方式不对

你的前端已经正确设置了Content-Type: application/json并发送了JSON格式的数据,但后端直接对request.bodydecode后就打印,没有把JSON字符串解析成字典来提取question字段。

现在给你修改后的代码:

后端Django视图修改:

from django.http import JsonResponse
import json

@csrf_exempt
def rest_handler(request):
    # 只处理POST请求,跳过OPTIONS预检请求
    if request.method != 'POST':
        return JsonResponse({}, status=200)
    
    print("REQUEST IS SENT FROM FRONTEND")
    try:
        # 把请求体的JSON字符串解析成Python字典
        req_data = json.loads(request.body)
        # 提取question字段,默认空字符串防止KeyError
        q_info = req_data.get('question', '')
        print(f"QUESTION: {q_info}")
    except json.JSONDecodeError:
        print("ERROR: 无法解析请求的JSON数据")
        q_info = ""
    
    # 这里别返回request,返回你需要的响应内容,比如收到的问题
    return JsonResponse({'received_question': q_info})

前端代码确认:

你的前端Axios配置和发送逻辑是对的,不过可以再检查下API_URL是否和后端服务的地址一致,避免跨域配置出问题。如果是跨域场景,建议给Django装个django-cors-headers包来统一处理CORS,比自己写视图处理OPTIONS更靠谱。

最后说下日志的问题:

修改后你再看日志,会先看到OPTIONS请求的200记录,然后会出现POST请求的记录,这时候QUESTION:后面就会显示你前端发送的字符串了!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:20:31