【问题标题】:get the session time in django rest framework在 django rest 框架中获取会话时间
【发布时间】:2018-11-27 15:54:55
【问题描述】:

我是 python 和使用 Django rest 框架的新手。我按照教程“http://www.django-rest-framework.org/tutorial/quickstart”为管理员创建了一个登录注销页面。我想跟踪会话时间或基本上用户登录的时间,我尝试通过遵循许多类似“https://github.com/GetBlimp/django-rest-framework-jwt”的教程来做同样的事情,但我认为我偏离了我想要的,请提出任何建议教程或任何帮助。 谢谢

【问题讨论】:

  • 也许只使用 user.last_login
  • last_login 将在用户登录时给出,但在他注销时也需要。
  • 啊,是的,错过了。所以也许只是为 last_logout 添加另一个字段并以与 Django 为 last_login 相同的方式填充它?但问题是什么是注销。如果用户清除 cookie,他在技术上已注销,但您无法跟踪此
  • 不知道它也有last_logout,我研究了一下,但没有找到相同的,你能否提供一些相同的链接,这将是一个很大的帮助。
  • 使用 django 会话:docs.djangoproject.com/en/2.0/topics/http/sessions。试一试,放一些尝试过的代码,然后我们再看一遍

标签: python django django-rest-framework


【解决方案1】:

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

我们可以例如构造一个模型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)

    session_start = models.DateTimeField(auto_now_add=True)

当然现在我们仍然需要确保构造了这样的对象,但是我们可以为登录过程创建一个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)
    UserSession.objects.get_or_create(
        user=user,
        session=Session.objects.get(pk=request.session.session_key)
    )

然后我们可以获取会话开始的时间:

from datetime import datetime

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

【讨论】:

    猜你喜欢
    • 2018-07-17
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2017-04-07
    • 2017-10-13
    • 2016-06-23
    • 1970-01-01
    相关资源
    最近更新 更多