Представление выхода из журнала Django не работает (без сетевого трафика)

Я изучаю Django, чтобы создать бэк-энд для своего сайта. Я делаю приложение аутентификации для проекта. Я тестирую его, используя отдельный html-файл вместо шаблона, так как в конечном итоге я хочу связать его с фронт-эндом. Вид входа в систему работает нормально, а вот выход из системы - нет. Он печатает на терминале сервера сообщение об успехе: "POST /members/logout_user/ HTTP/1.1" 200 10 но ничего не делает в браузере. Нет никакого сетевого трафика.

Просмотров:

from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.http import HttpResponse
from rest_framework.decorators import api_view

@api_view(['POST'])
def login_user(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        return HttpResponse("Logged in")

    else:
        return HttpResponse("incorrect")

@api_view(['POST'])
def logout_user(request):
    logout(request)
    return HttpResponse("logged out")

Мой html-клиент:

<!DOCTYPE html>
<html>
  <body>
    <form method="POST" action="http://127.0.0.1:8000/members/login_user/">
      User name: <input type="text" name="username" id="username" /> <br />
      Password: <input type="password" name="password" id="password" />
      <input type="submit" />
    </form>

    <button onclick="logout()">Log out</button>
    <script>
      function logout() {
        csrf_cookieValue = document.cookie
          .split(";")
          .find((row) => row.startsWith("csrftoken"))
          .split("=")[1];
        let xhr = new XMLHttpRequest();
        xhr.open("POST", "http://127.0.0.1:8000/members/logout_user/");
        xhr.setRequestHeader("X-CSRFToken", "csrf_cookieValue");
        xhr.send();
    </script>
  </body>
</html>

используйте вместо этого

@api_view(['POST'])

to

@api_view(['GET'])

Потому что вы не можете ввести данные для выхода из системы. Итак, ваш код должен быть таким

и во-вторых, вам нужно истечь срок действия токена, который был создан при входе в систему.

@api_view(['GET'])
def logout_user(request):
    request.user.auth_token.delete()
    logout(request)
    return HttpResponse("logged out")
Вернуться на верх