当前位置: 首页 > news >正文

axios 前端与 Django 后端的 POST 交互

背景

自己在写一些油猴脚本,前端需要用 JS,后端是自己的服务,是用 Python 的 Django 框架完成的。

油猴脚本中需要通过 POST 方法,向后端传一些数据,所以前端我用的是 axios 库,后端需要用 Django 处理 POST 数据。

关于跨域名的问题,可以参考我的另一篇文章 Django 跨站请求伪造(csrf)防御——解决 POST 请求 403 问题

关于 POST 请求

POST 请求有多种类型,在 header 中的 Content-Type 中进行了定义。

Content-Type描述
application/json用于发送 JSON 格式的数据,axios 默认使用该格式
application/x-www-form-urlencoded用于提交表单数据,不支持传输文件,Django 文档中主要描述的是这种类型
multipart/form-data用于发送文件或同时发送文本数据和二进制数据
text/plain用于发送纯文本内容,不常用
application/xml用于发送或接收 XML 格式的数据,不常用

常用 POST 请求对应的发起与接收代码示例

application/json 类型

axios 发起,也是 axios 默认发起的 POST 请求时的类型:

data = { key: 'value'
}
headers = {'Content-Type': 'application/json'
}axios.post('url', data,{headers: headers
})
.then(function (response) {// 处理成功响应console.log(response.data);
})
.catch(function (error) {// 处理错误console.error(error);
});

Django 处理:

from django.http import JsonResponse
import jsondef my_json_post_view(request):if request.method == 'POST':data = json.loads(request.body)  # 解析JSON数据if 'key' in data.keys():# 处理数据...return JsonResponse({'message': f' key 的内容是 {data["key"]}'})

application/x-www-form-urlencoded 类型

axios 发起:

data = { key: 'value'
}
headers = {'Content-Type': 'application/x-www-form-urlencoded'
}axios.post('url', data, {headers: headers
})
.then(function (response) {// 处理成功响应console.log(response.data);
})
.catch(function (error) {// 处理错误console.error(error);
});

Django 处理:

def my_form_post_view(request):if request.method == 'POST':# 访问表单数据value = request.POST['key']# 处理数据...return HttpResponse('处理成功')  # 或者返回其他类型的响应

multipart/form-data 类型

嫌麻烦的,可以不用这个类型,因为我们可以偷懒一点,把文件进行 base64 编码,之后在 Django 后端的代码里进行 Base64 解码即可

axios 发起:

const formData = new FormData(); // 创建 FormData 实例
formData.append('file', fileInput.files[0]); // 添加文件字段和值(fileInput 是你的文件输入元素)
formData.append('textField', 'some text'); // 添加其他字段和值(如果需要的话)headers = {'Content-Type': 'multipart/form-data'
}axios.post('url', formData, {headers: headers
})
.then(function (response) {// 处理成功响应console.log(response.data);
})
.catch(function (error) {// 处理错误console.error(error);
});

Django 处理:

from django.core.files.uploadhandler.upload_handlers import upload_to_save_object
import osdef my_file_upload_view(request):if request.method == 'POST':uploaded_file = request.FILES['file']  # 获取上传的文件对象text_field = request.POST['textField'] # 获取其他字段# 保存文件到服务器等操作...return HttpResponse('文件上传成功')  # 返回响应
http://www.lryc.cn/news/458299.html

相关文章:

  • 数据结构常用术语
  • Flask 轻松上手:从零开始搭建属于你的Web应用
  • [MyBatis-Plus]快速入门
  • 单例模式和读者写者问题
  • 内网wordpress更换IP后无法访问的解决办法
  • Spring Boot课程答疑:技术难题一网打尽
  • 云卷云舒【超级数据库】:算力网络时代的云原生数据库
  • 电脑分盘分盘
  • 四元数基础知识
  • 『网络游戏』进入游戏主城UI跳转主城【26】
  • 多点低压差分(M-LVDS)线路驱动器和接收器——MS2111
  • regexp_split_to_table的作用
  • 【MATLAB】基于RSSI的蓝牙定位程序,4个锚点、二维平面
  • 利用 langchain 和 LLM 来给 PDF 做总结
  • props 不能轻易解构,注意maxLength类似这种,不能解构出来
  • 总结拓展十三:SAP系统采购订单关闭实例分享
  • 内嵌服务器Netty Http Server
  • Maven打包运行,引入三方jar及打包,不导入本地库的方法
  • 02复写零
  • 01-gcc编译c++过程
  • 互动式教育技术:Spring Boot师生共评作业管理系统
  • 【云从】三、计算机网络基础
  • 读书笔记《向上生长》关于记忆、链接的一些思考
  • Kubesphere4.1版本创建应用Mysql并实现外网访问
  • 小猿口算跟风版——没想到吧,这也能暴力
  • 【RabbitMQ——消息应答机制——分布式事务解决方式】
  • Android Studio Koala中Kotlin引入序列化Parcelable
  • 安装postgresql和对应wal2json和pg_tm_aux插件避坑
  • OneDrive 全新时代:AI、生产力和回忆触手可及
  • List子接口