使用 Django 信号识别当前用户会话
Using Django signals to identify a present user session
我想使用 django 信号来识别用户是否登录了两次,如果是,则撤销他的第一个会话,以便一次只能存在一个用户会话。
我使用了以下示例,但似乎我的 signals.py 甚至没有重新连接,我不知道为什么。
示例:
accounts/signals.py
from django.contrib.auth import user_logged_in
from django.dispatch.dispatcher import receiver
from django.contrib.sessions.models import Session
from .models import UserSession
@receiver(user_logged_in)
def remove_other_sessions(sender, user, request, **kwargs):
# remove other sessions
Session.objects.filter(usersession__user=user).delete()
# save current session
request.session.save()
# create a link from the user to the current session (for later removal)
UserSession.objects.get_or_create(
user=user,
session=Session.objects.get(pk=request.session.session_key)
)
accounts/models.py
# Model to store the list of logged in users
class UserSession(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
session = models.OneToOneField(Session, on_delete=models.CASCADE)
accounts/apps.py
from django.apps import AppConfig
class AccountsConfig(AppConfig):
name = 'Accounts'
def ready(self):
import Accounts.signals
但由于某种原因,没有任何内容被写入数据库 table。
我可能在这里遗漏了什么,这是我第一次接触信号,所以我可能在配置时遗漏了一些东西。
试试这个,
default_app_config = 'Accounts.apps.AccountsConfig'
将此行添加到 apps.py 文件目录的 __init__.py 文件中。
我想使用 django 信号来识别用户是否登录了两次,如果是,则撤销他的第一个会话,以便一次只能存在一个用户会话。
我使用了以下示例,但似乎我的 signals.py 甚至没有重新连接,我不知道为什么。
示例:
accounts/signals.py
from django.contrib.auth import user_logged_in
from django.dispatch.dispatcher import receiver
from django.contrib.sessions.models import Session
from .models import UserSession
@receiver(user_logged_in)
def remove_other_sessions(sender, user, request, **kwargs):
# remove other sessions
Session.objects.filter(usersession__user=user).delete()
# save current session
request.session.save()
# create a link from the user to the current session (for later removal)
UserSession.objects.get_or_create(
user=user,
session=Session.objects.get(pk=request.session.session_key)
)
accounts/models.py
# Model to store the list of logged in users
class UserSession(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
session = models.OneToOneField(Session, on_delete=models.CASCADE)
accounts/apps.py
from django.apps import AppConfig
class AccountsConfig(AppConfig):
name = 'Accounts'
def ready(self):
import Accounts.signals
但由于某种原因,没有任何内容被写入数据库 table。
我可能在这里遗漏了什么,这是我第一次接触信号,所以我可能在配置时遗漏了一些东西。
试试这个,
default_app_config = 'Accounts.apps.AccountsConfig'
将此行添加到 apps.py 文件目录的 __init__.py 文件中。