我有一个JQuery事件,当单击链接时,会将AJAX POST请求发送到Django函数。在那里,我打印接收到的URL并对其进行其他处理。但是,当它由Django打印时,URL中的某些字符会更改。
发生此情况的特定网址是:
https://www.catholicleague.org/05press_releases/quarter%204/051110_put_on_notice.htm
打印为:
https://www.catholicleague.org/05press_releases/quarter+4/051110_put_on_notice.htm
%20
更改为+
的地方
这是AJAX和Django代码:
$("a").on("click", function(e){
e.preventDefault();
if(e.target.href){
let clicked_source = e.target.href;
let csrf_tok = parent.document.getElementById("csrf_tok").value;
$.ajax({
url: "/change_origin/",
data: JSON.stringify({"clicked_source":clicked_source}),
type: "POST",
beforeSend: function (xhr, settings) { xhr.setRequestHeader("X-CSRFToken", csrf_tok );},
success: function(response) {
console.log(response.msg)
},
error:function(error) { console.log(error); }
});
}
});
def change_origin(request):
if request.method == 'POST':
received = ast.literal_eval(request.body.decode())
print(received)
clicked_source_url = received['clicked_source']
return JsonResponse({'msg': "ok"})
其中解码用作JSON对象,在Python中作为字节对象接收。 ast用于将对象的字符串表示形式转换为实际的对象(或字典)以供访问。
我需要:
1)一种从Ajax向Django发送字符串的方法
2)一种更好的处理接收到的对象的方法,因为我相信使用.decode()
可能是导致此问题的一种方法。
编辑:该链接是本文“起源”部分中的第二个链接
https://www.snopes.com/fact-check/an-unmerried-woman/