gpt4 book ai didi

python - 获取 Django Rest Framework 中的 session 时间

转载 作者:行者123 更新时间:2023-12-01 09:19:28 25 4
gpt4 key购买 nike

我对 Python 非常陌生,并且使用 Django Rest 框架。我按照教程“http://www.django-rest-framework.org/tutorial/quickstart”并为管理员创建了一个登录注销页面。我想跟踪 session 时间或者基本上跟踪用户登录的时间,我尝试通过遵循许多教程(例如“https://github.com/GetBlimp/django-rest-framework-jwt”)来执行相同的操作。 '但我认为我偏离了我想要的,请建议任何教程或任何帮助。谢谢

最佳答案

在我看来,这没有存储在Session中,但没有什么可以阻止我们自己存储它。

例如,我们可以构造一个模型UserSession:

# models.py

from django.conf import settings
from django.db import models
from django.contrib.sessions.models import Session

class UserSession(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
session = models.OneToOneField(Session, on_delete=models.CASCADE)

<b>session_start = models.DateTimeField(auto_now_add=True)</b>

当然现在我们仍然需要确保构造了这样的对象,但是我们可以为登录过程创建一个钩子(Hook):

from django.contrib.auth import user_logged_in
from django.dispatch.dispatcher import receiver

@receiver(user_logged_in)
def register_session(sender, user, request, **kwargs):

# save current session
request.session.save()

# create a link from the user to the current session (for later usage)
<b>UserSession.objects.get_or_create(
user=user,
session=Session.objects.get(pk=request.session.session_key)
)</b>

然后我们可以获得 session 开始的时间:

from datetime import datetime

def some_view(request):
try:
session_started = <b>request.session.usersession.session_start</b>
except UserSession.DoesNotExist:
# ...
# handle the case when the UserSession is not present
pass
else:
session_duration = datetime.now() - session_started
# ...
pass

关于python - 获取 Django Rest Framework 中的 session 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50915625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com