后端接收对象
若希望django后端接受到字典类型,data中直接写对象;
前端代码:
$.ajax({
url: url,
type: "POST",
data: {
key: "value"
},
success: function (data) {
alert(data);
}
});
若要跨域设置 crossDomain: true
禁止异步操作,async: false;
,这样可以保证程序的正常流程进行;
除非是获取数据直接就渲染到页面上,这样可以使用异步;
需要在django 接受POST传参的python函数前加上
@csrf_exempt
后端代码如下:
@csrf_exempt
def save_paper(request):
if request.method == "POST":
data = request.POST
fid = data.get('fid')
if not fid:
return "not found fid"
json_data = get_file_json_by_fid(fid)
# 先拿到文件的json数据,准备进行写入
for key in data:
if key == "fid":
continue
json_data[key] = data[key]
# 写入文件
write_file_json_by_id(fid, json_data)
return JsonResponse(json_data)
else:
return HttpResponse("not found post")
后端接收json
嵌套对象传递到后端会发生键的合并。破坏了结构,故我采用上传json数据;
前端代码如下:
function () {
$.ajax({
type: "POST",
url: "/xxx",
dataType: 'json',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(object),
success: function (data) {
alert("上传成功");
}
})
}
后端接收代码如下:
pip install simplejson
import simplejson
@csrf_exempt
def save_json_by_fid(request):
"""
保存内容,给予成功和失败的状态码
:param request:
:return:
"""
if request.method == "POST":
simplejson_data = simplejson.loads(request.body)
print(simplejson_data)
与前面不同之处是,从
request.body
里去读取json并进行转换
附录
django json文件的读写函数
import json
from pathlib import Path
def get_file_json_by_fid(fid):
s = f"app/static/json/papers/{fid}.json" # 网站使用
# s = f"../static/json/papers/{fid}.json" # 测试专用
# print("绝对: ", Path(s).absolute())
p = Path(s).read_text()
if len(p) == 0:
p = "{}"
return json.loads(p)
def write_file_json_by_id(fid, data):
s = f"app/static/json/papers/{fid}.json" # 网站使用
# s = f"../static/json/papers/{fid}.json" # 测试专用
json_str = json.dumps(data)
Path(s).write_text(json_str)