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

如何通过Django API获取Angular表单的POST输入值

Angular 登录表单 POST 到 Django 无法通过 request.POST 获取数据的解决方法

核心问题:Angular 默认发送的是 Content-Type: application/json 格式的请求体,而 Django 的 request.POST 仅解析 application/x-www-form-urlencoded 或 multipart/form-data 类型的表单数据,JSON 格式的请求数据会被存放在 request.body 中,因此直接用 request.POST['user']/request.POST['pwd'] 无法获取值。

下面提供两种可行的解决方式:

方式一:修改 Angular 请求为表单编码格式

调整 Angular 的请求逻辑,把 JSON 数据转换成表单编码格式发送,这样 Django 就能通过 request.POST 正常读取数据。

修改 Angular Service 代码

假设你原来的 service 方法是这样的:

login(user: string, pwd: string) {
  return this.http.post('/api/login/', { user, pwd });
}

改成用 HttpParams 构造表单数据,并设置正确的请求头:

import { HttpParams, HttpClient } from '@angular/common/http';

// ... 其他代码
login(user: string, pwd: string) {
  const formData = new HttpParams()
    .set('user', user)
    .set('pwd', pwd);
  
  return this.http.post('/api/login/', formData.toString(), {
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
  });
}

修改后,Django 端无需改动,直接用 request.POST['user'] 和 request.POST['pwd'] 就能拿到数据。

方式二:在 Django 端解析 JSON 请求体

如果不想改动 Angular 代码,直接在 Django 视图里解析 request.body 中的 JSON 数据即可。

修改 Django API 视图代码

import json
from django.http import JsonResponse

def login(request):
    if request.method == 'POST':
        try:
            # 解析请求体中的 JSON 数据
            request_data = json.loads(request.body)
            user = request_data.get('user')
            pwd = request_data.get('pwd')
            
            # 这里写你的登录逻辑,比如验证账号密码等
            return JsonResponse({'status': 'success', 'message': '登录成功'})
        except json.JSONDecodeError:
            return JsonResponse({'status': 'error', 'message': '请求格式错误'})

如果你的 Django 版本在 3.1 及以上,可以用更简洁的 request.json 属性直接获取解析后的 JSON 数据:

def login(request):
    if request.method == 'POST':
        request_data = request.json
        user = request_data.get('user')
        pwd = request_data.get('pwd')
        
        # 后续逻辑
        return JsonResponse({'status': 'success'})

额外提醒

如果 Angular 和 Django 部署在不同域名下,记得在 Django 中配置跨域支持,推荐使用 django-cors-headers 库来快速配置,避免请求被浏览器拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:57:25