Как удалить сессии, когда пользователь выходит из Django? - PullRequest
1 голос
/ 24 сентября 2019

Я учу Джанго.Я создал функцию выхода.Но когда я повторяю цикл, он выдает ошибку.

Мой код:

def logout(request):
    for key in request.session.keys():
        del request.session[key]

    return redirect('login')

Но получите эту ошибку?Я использую Python 3. Вы можете мне помочь?

RuntimeError at /logout/
dictionary changed size during iteration

1 Ответ

2 голосов
/ 24 сентября 2019

Изменение коллекции, для которой вы выполняете итерацию, сложно , и часто недопустимо.Это может легко привести к проблемам, поскольку итератор обычно реализуется в предположении, что коллекция не изменится.

Однако вам не нужно перебирать ключи здесь.Вы можете использовать метод clear() [Django-doc] :

def logout(request):
    <b>request.session.clear()</b>
    return redirect('login')

Однако этого недостаточно.Django уже сделал функцию выхода пользователя из системы, которая очистит сеанс, удалит его и т. Д. logout(..) [Django-doc] .Таким образом, вы можете реализовать это как:

from django.contrib.auth import logout as <b>auth_logout</b>

def logout(request):
    <b>auth_logout(request)</b>
    return redirect('login')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...