从Django打印时,使用AJAX发送到Django的URL不同

时间:2019-07-04 14:51:10

标签: python jquery django ajax

我有一个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/

0 个答案:

没有答案