gpt4 book ai didi

python - 解码 Django POST 请求正文

转载 作者:行者123 更新时间:2023-12-01 08:36:04 24 4
gpt4 key购买 nike

我正在使用 cordova 构建一个 map 应用程序,并发出发送以下 JSON(功能)的发布请求

{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-6.6865857,
53.2906136
]
},
"properties": {
"amenity": "pub",
"name": "The Parade Ring"
}

}

这是发送请求的 JQuery 代码

function savePub(feature){

$.ajax({
type: "POST",
headers: {"csrfmiddlewaretoken": csrftoken},
url: HOST + URLS["savePub"],
data: {
pub_feature: JSON.stringify(feature)
},
contentType:"application/json; charset=utf-8"
}).done(function (data, status, xhr) {
console.log(data + " " + status);
pubDialogAlert("Pub saved",feature);
}).fail(function (xhr, status, error) {
showOkAlert(error);
console.log(status + " " + error);
console.log(xhr);
}).always(function () {
$.mobile.navigate("#map-page");
});

}

当 Django 后端收到请求时,我不确定为什么当我打印请求正文时它看起来像这样,

b'pub_feature=%22%7B%5C%22type%5C%22%3A%5C%22Feature%5C%22%2C%5C%22geometry%5C%22%3A%7B%5C%22type%5C%22%3A%5C%22Point%5C%22%2C%5C%22coordinates%5C%22%3A%5B-6.6865857%2C53.2906136%5D%7D%2C%5C%22properties%5C%22%3A%7B%5C%22amenity%5C%22%3A%5C%22pub%5C%22%2C%5C%22name%5C%22%3A%5C%22The+Parade+Ring%5C%22%7D%7D%22'

当我尝试解码它然后使用 json.loads() 时,它会抛出此错误

@api_view(['POST'])
def save_pub(request):
if request.method == "POST":

data = request.body.decode('utf-8')
received_json_data = json.loads(data)

return Response(str(received_json_data) + " written to db", status=status.HTTP_200_OK)


JSONDecodeError at /savepub/
Expecting value: line 1 column 1 (char 0)

我假设是因为一旦它解码了二进制字符串,由于这些字符 %22 等,它就无法转换为有效的 JSON,但我不知道解决方案是什么。

如有任何帮助,我们将不胜感激。谢谢

最佳答案

您在这里混淆了两件事:表单编码和 JSON 格式。您拥有的是一个表单编码的帖子,其中包含一个键 pub_feature,其值是一个 JSON 对象。

相反,您应该直接发布 JSON:

data: JSON.stringify(feature),

然后你应该能够像你已经做的那样加载它 - 尽管请注意,实际上你应该让 DRF 为你处理这个问题

关于python - 解码 Django POST 请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53714037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com