Проверьте, вошел ли пользователь в систему или нет django по имени пользователя

В django login мы можем ввести if request.user.is_authenticated, чтобы проверить, вошел ли пользователь в систему. Но если мы хотим проверить статус входа конкретного пользователя, введя имя пользователя, мы получим следующее:

#Python
def checkLoginStatus(username):
    #do some checks here....
    return True or False

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
1 868
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

def checkLoginStatus(username):
    
    if User.objects.filter(username=username).exists():
        usr = User.objects.get(username=username)
        if usr.is_authenticated:
            return True
        else:
            return False
    else:
        print("No user exist with this {} username.".format(username))
        return False

То, как реализовано is_authenticated, всегда будет возвращать true. Только анонимные пользователи возвращают False.

user1600649 25.12.2020 15:28

вы говорите о request.user, но здесь мы используем локальную переменную в качестве пользователя. Но для безопасности я редактирую свой ответ, чтобы использовать другое имя переменной.

Sohaib 25.12.2020 15:32
Орли?
user1600649 25.12.2020 15:40

@ Мелвин, конечно, проверю.

Sohaib 25.12.2020 16:03

я пробовал... и, как сказал @Melvyn... он всегда возвращал True... и только для анонимных пользователей он возвращал False

Shashwat Agrawal 27.12.2020 16:32

ShashwatAgrawal @Melvyn, спасибо, что поправили меня. Мелвин, я должен удалить свой ответ? Так как не подходит.

Sohaib 27.12.2020 19:37
Ответ принят как подходящий

Django не отслеживает состояние входа пользователя. Он отслеживает:

  • Является ли сеанс действительным (не просрочен, существует в хранилище сеансов и т. д.)
  • Последний раз, когда пользователь аутентифицировал себя и перешел из незалогиненного в залогиненный (через last_login

Если вы хотите отслеживать его, вам нужно сделать это самостоятельно:

  • Добавьте модель профиля пользователя с полем, допускающим значение NULL session_key.
  • Добавьте приемники сигналов для событий logged_in и logged_out.
  • По событию logged_in получить сеансовый ключ от request.session (запрос передается сигналу) и сохранить его в модели профиля
  • После события logged_out установите для session_key значение None
  • Теперь вы можете реализовать свойство is_logged_in, которое извлекает ключ сеанса для пользователя из его модели профиля, а затем проверяет, действителен ли сеанс, получая сеанс из модели Session. Если он действителен, пользователь вошел в систему.

Другие вопросы по теме