У меня есть событие JQuery, которое, когда щелкают ссылку, отправляет запрос AJAX POST в функцию Django. Там я печатаю полученный URL и делаю с ним другие вещи. Однако, когда он печатается (Джанго), некоторые символы в URL меняются.
Конкретный 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 используется для преобразования строкового представления объекта в реальный объект (или dict) для доступа.
Мне нужно либо:
1) Способ просто отправить строку из Ajax в Django
2) Лучшим способом справиться с полученным объектом, как я полагаю, является использование .decode()
, способное вызвать эту проблему.
РЕДАКТИРОВАТЬ: ссылка является второй ссылкой в части «происхождение» этой статьи
https://www.snopes.com/fact-check/an-unmerried-woman/