Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django rest框架中获取会话时间_Python_Django_Django Rest Framework - Fatal编程技术网

Python 在django rest框架中获取会话时间

Python 在django rest框架中获取会话时间,python,django,django-rest-framework,Python,Django,Django Rest Framework,对于python和使用Django rest框架,我是一个真正的新手。我遵循了教程“”并为管理员创建了一个登录注销页面。我想跟踪会话时间或用户登录的基本时间,我尝试通过以下许多教程来进行跟踪“”,但我认为我偏离了我想要的,请建议任何教程或任何帮助。 谢谢在我看来,这不会存储在会话中,但是没有任何东西阻止我们自己存储它 例如,我们可以构建一个模型UserSession: # models.py from django.conf import settings from django.db imp

对于python和使用Django rest框架,我是一个真正的新手。我遵循了教程“”并为管理员创建了一个登录注销页面。我想跟踪会话时间或用户登录的基本时间,我尝试通过以下许多教程来进行跟踪“”,但我认为我偏离了我想要的,请建议任何教程或任何帮助。
谢谢

在我看来,这不会存储在
会话中,但是没有任何东西阻止我们自己存储它

例如,我们可以构建一个模型
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)
#models.py
从django.conf导入设置
从django.db导入模型
从django.contrib.sessions.models导入会话
类UserSession(models.Model):
user=models.ForeignKey(settings.AUTH\u user\u MODEL,on\u delete=models.CASCADE)
会话=models.OneToOneField(会话,on_delete=models.CASCADE)
session\u start=models.datetime字段(auto\u now\u add=True)
当然,现在我们仍然需要确保构建了这样的对象,但是我们可以为登录过程创建一个钩子:

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)
    )
从django.contrib.auth导入用户登录
从django.dispatch.dispatcher导入接收方
@接收器(用户已登录)
def注册会话(发送方、用户、请求,**kwargs):
#保存当前会话
request.session.save()
#创建从用户到当前会话的链接(供以后使用)
UserSession.objects.get\u或\u create(
用户=用户,
session=session.objects.get(pk=request.session.session\u 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
从日期时间导入日期时间
定义某些视图(请求):
尝试:
session\u start=request.session.usersession.session\u start
除UserSession.DoesNotExist外:
# ...
#处理用户会话不存在时的情况
通过
其他:
会话\u持续时间=datetime.now()-会话\u已启动
# ...

pass
可能只是使用user.last_login last_login将在用户登录时给出,但也需要在用户注销时给出。啊,是的,错过了。所以,也许只需为last_logout添加另一个字段,并以Django为last_Logon所用的相同方式填充它?但问题是什么是注销。如果用户清除Cookie,他在技术上已注销,但您无法跟踪此内容。我不知道它也有最后一次注销,我进行了一些研究,但没有找到相同的内容,您能否提供一些相同的链接,这将是一个很大的帮助。使用django会话:。试一试,把一些尝试过的代码放上去,然后让我们再看看