Django中如何携带JSON数据发起POST请求
前置配置
- 先在Django项目的
urls.py中为该视图绑定访问路由,示例配置:
from django.urls import path from . import views urlpatterns = [ # 可自定义路径,示例为/jiranewsprint/ path('jiranewsprint/', views.jiranewsprint, name='jiranewsprint'), ]
- 处理CSRF校验:Django默认对POST请求开启CSRF校验,如果你是用外部客户端发起请求,两种处理方案二选一:
- 给视图添加
@csrf_exempt装饰器跳过校验(测试环境使用,生产环境按需开启):
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def jiranewsprint(request): # 原有代码逻辑不变
- 请求头中携带当前会话的
X-CSRFToken令牌值。
- (可选)如果要限制该视图仅接受POST请求,可添加
@require_POST装饰器:
from django.views.decorators.http import require_POST from django.views.decorators.csrf import csrf_exempt @csrf_exempt @require_POST def jiranewsprint(request): # 原有代码逻辑不变
发起POST请求的几种常用方式
假设你的Django服务运行在本地127.0.0.1:8000,路由配置为/jiranewsprint/:
方式1:curl命令行发起
curl -X POST http://127.0.0.1:8000/jiranewsprint/ \ -H "Content-Type: application/json" \ -d '{ "issue": { "fields": { "customfield_10200": "替换为实际的迭代名称" } } }'
方式2:Python requests库发起
import requests import json url = "http://127.0.0.1:8000/jiranewsprint/" # 按你代码的取值路径构造JSON payload即可 payload = { "issue": { "fields": { "customfield_10200": "Sprint_202405" } } } headers = { "Content-Type": "application/json" } response = requests.post(url, headers=headers, data=json.dumps(payload)) print(response.status_code) # 正常请求会返回200
方式3:前端fetch发起请求
const url = 'http://127.0.0.1:8000/jiranewsprint/' const payload = { issue: { fields: { customfield_10200: "前端传入的迭代名称" } } } fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', // 未关闭CSRF校验的话需要加下面这行 // 'X-CSRFToken': 你获取到的CSRF令牌值 }, body: JSON.stringify(payload), }).then(res => console.log(res.status))
请求发送成功后,你的视图代码会正确解析传入的JSON数据,取到customfield_10200的值后构造sandboxcall参数。
内容的提问来源于stack exchange,提问作者Rituparna Das
相关产品推荐
相关产品推荐

