Django HttpResponseRedirect возвращает перенаправление в браузер, но браузер не перенаправляет
def auth(request):
if request.method == 'GET':
return render(request, 'Study/auth.html')
elif request.method == 'POST':
try:
data = dict_from_raw_data(request.body)
user = User.get_user(data['login'], data['password'])
request.session['cookie'] = user.cookie
return HttpResponseRedirect(reverse('main'))
except django.core.exceptions.ObjectDoesNotExist:
return JsonResponse(USER_DOES_NOT_EXIST)
path('', main, name='main')...
function getCookie (name) {
let cookie_value;
let cookies = document.cookie.split(';');
for (let idx = 0; idx < cookies.length; idx++){
if (cookies[idx].split('=')[0].trim() == name){
cookie_value = cookies[idx].split('=')[1].trim();
return cookie_value;
}
}
}
function send (data, csrftoken) {
let request = new XMLHttpRequest();
request.open('POST', document.location, false);
request.setRequestHeader('X-CSRFToken', csrftoken);
data = JSON.stringify(data);
console.log(data);
request.send(data);
console.log(request.responseType);
}
let button = document.getElementById('button');
let csrftoken = getCookie('csrftoken');
button.onclick = () => {
let form = document.getElementById('auth');
let data = new Object();
for (let i = 0; i < form.elements.length; i++){
data[form.elements[i].name] = form.elements[i].value;
}
console.log(data);
send(data, csrftoken);
}
Пользователь отправляет форму для авторизации и, в случае успеха, сервер возвращает перенаправление. Но перенаправления не происходит. В консоли отображается html-код нужной мне страницы. Django показывает, что запросы get прошли с кодом 200. Как можно решить эту проблему?
Я пытался использовать перенаправление, HttpResponseRedirect, но я не знаю, в чем причина
Вместо этого сделайте return reverse('main')
, что должно дать вам путь к странице, которую вы хотите отобразить. Затем в JavaScript сделайте window.location.href = 'http://127.0.0.1' + request.responseText
(я предполагаю, что вы делаете это локально, но если нет, просто измените первую строку на URL вашего сервера).