wordpress适合外贸站,网站怎么做qq微信登陆界面设计,营业执照年检,网站文章内容的选取背景
自己在写一些油猴脚本#xff0c;前端需要用 JS#xff0c;后端是自己的服务#xff0c;是用 Python 的 Django 框架完成的。
油猴脚本中需要通过 POST 方法#xff0c;向后端传一些数据#xff0c;所以前端我用的是 axios 库#xff0c;后端需要用 Django 处理 P…背景
自己在写一些油猴脚本前端需要用 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(文件上传成功) # 返回响应