У меня есть приложение django, которое успешно может зарегистрироваться и войти в систему, но я не могу выйти из системы.
Во внешнем интерфейсе у меня есть веб-страница, содержащая значок кнопки питания, который при нажатии должен запускать запрос на выход.
Я использую angular js для интерфейса
index.html
<div class = "col-xs-2">
<span style = "opacity: 0.5;font-family: FontAwesome;font-size: 14px;color:#838F98;text-align:center;cursor:pointer" ng-click = "logout()">
<i class = "fa fa-power-off" aria-hidden = "true"></i>
</span>
</div>
Здесь я использую ngclick для вызова функции logout(), которая определена в моем index.js
index.js
$scope.logout = function() {
var url = '/logout';
var toSend = {
username: username_id,
}
$http({
method: 'POST',
url: url,
data: toSend,
}).then(function(response) {
response.data;
})
};
Эта функция вызывает URL-адрес /logout, для которого я определил просмотры аутентификации в urls.py
urls.py
from django.contrib.auth.views import login, logout
url(r'^logout$', logout, {'template_name': 'login.html'}),
Но когда я нажимаю на значок питания на веб-странице, ничего не происходит. Пользователь остается на странице, и я не получаю сообщения об ошибке.
Что я делаю неправильно?
ОБНОВИТЬ
Хорошо, я изменил вызов Javascript POST на URL-адрес /logout на вызов GET, и, похоже, он работает. Однако страница не перенаправляет на страницу login.html и остается на той же странице. Если я закрываю вкладку и снова открываю ее, она запрашивает для повторного входа в систему, что означает, что выход из системы сейчас работает, но почему он не перенаправляет на страницу входа и просто остается там?
Вы случайно не перезаписали процедуру logout (например, импортировали что-то с похожим именем или записали функцию logout в views.py)?
@WillemVanOnsem нет, в моем views.py я определил logout_view как функцию для выхода пользователей из системы. Больше нигде в файле views.py я не определил любую функцию с именем logout.
Можете ли вы опубликовать свой консольный вывод
@EmmanuelMtali Я опубликовал обновление вопроса.
@WillemVanOnsem, пожалуйста, проверьте обновление вопроса.
как насчет вашего файла настроек, вы установили LOGOUT_REDIRECT_URL?
@ matiasm77 о, я забыл установить это. Однако даже тогда он не перенаправляется. В элементе проверки я вижу, что он пытается сначала получить URL-адрес /logout, который я не определил, и выдает ошибку 302. А затем он пытается посетите URL-адрес '/ login'. Но я все равно не хочу, чтобы он посещал URL-адрес '/ logout'. Я просто хочу, чтобы он был перенаправлен на URL-адрес страницы входа, который является '/ login', и это я установил как значение LOGOUT_REDIRECT_URL.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проведя простое исследование, я обнаружил, что вам нужно перенаправить страницу с помощью javascript после того, как вы получили свой ответ.
В твоем случае
$scope.logout = function() {
var url = '/logout';
var toSend = {
username: username_id,
}
$http({
method: 'POST',
url: url,
data: toSend,
}).then(function(response) {
// perform redirect
window.location('/login');
})
};
привет, спасибо за ответ. Но если вы заметили мой urls.py, я использовал django auth views logout.
Какую версию django вы используете?
моя версия - django 1.10
попробуйте отладить в своей консоли.