Обработка ответа Http 302 в представлении Django и асинхронная функция Javascript
Для строгой безопасности, как я могу реализовать редирект на Django view в ответ на JS async вызов, который только обновляет div
InnerHTML? Это первое предпочтение.
Я пробовал JS редирект на стороне клиента несколькими способами. Это тоже не помогло. JS продолжает отображать домашнюю страницу как InnerHTML в div
.
Когда сессия пользователя завершается, сервер возвращает 302
Location: /
. Чтобы перевести пользователя на домашнюю страницу.
View
@csrf_protect
def edit_form(request):
if not request.user.is_authenticated:
return redirect('/')
form = userForm()
return render(request, 'edit_form.html', {'form': form})
JS
async function fetch_form() {
try {
const response = await fetch('http://192.168.1.10:8000/edit_form',{
method: 'GET',
});
if (!response.ok) { //redirect didn't work
const redirectUrl = response.headers.get('Location');
console.log(redirectUrl);
window.location.href = redirectUrl;
//throw new Error('Network response was not ok ' + response.statusText);
} else if (response.status === 302) { //redirect didn't work
const redirectUrl = response.headers.get('Location');
console.log(redirectUrl);
window.location.href = redirectUrl;
}
document.getElementById('firstModal').innerHTML = data;
} catch (error) {
console. Error('There has been a problem with your fetch operation:', error);
}
};
async function fetch_form() {
try {
const response = await fetch('http://192.168.1.10:8000/edit_form',{
method: 'GET',
});
if (!response.ok){
throw new Error('Network response was not ok ' + response.statusText);
}
document.getElementById('firstModal').innerHTML = data;
} catch (error) {
if (error.response.status === 302) { //redirect didn't work
const redirectUrl = response.headers.get('Location');
console.log(redirectUrl);
window.location.href = redirectUrl;
console.error('There has been a problem with your fetch operation:', error);
}
}
};