确定 django 中会话的年龄
如何确定 django 中会话对象的年龄?
How can I determine the age of a session object in django?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何确定 django 中会话对象的年龄?
How can I determine the age of a session object in django?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
好的,这就是我的想法。好多了。我认为这与在 Session 对象上使用 post_save 一样便宜:
OK, here's what I have come up with. Much better. I think this is as cheap as using post_save on a Session object is going to get:
这就是我最终所做的而不是托马斯的建议。请注意,我拒绝使用接收器装饰器,因此它在 1.3 之前仍然可以工作。
(这需要认真纠正)。
我希望有人能为我纠正这个问题,因为我不相信这是最有效的方法。
首先也是最重要的,每次修改会话时,这都会增加两次额外的数据库命中(第一次尝试:sessioninfo = SessionInfo.objects.get(session=instance))。
第一个显然是在查找过程中。第二种发生在保存发生时,再次触发整个过程。
该怎么办呢?
Here's what I ended up doing instead of Thomas' suggestion. Note that I declined to use the receiver decorator so that this will still work pre 1.3.
(This needs serious correction).
I hope that somebody can correct this for me, because I cannot believe that this is the most efficient way to do this.
First and foremost, this adds TWO extra database hits (in the first try: sessioninfo = SessionInfo.objects.get(session=instance)) every time a session is modified.
The first is obviously during the lookup. The second happens when the save occurs, triggering the entire process again.
What to do instead?
您需要挂钩来自 django.contrib.sessions.models.Session 的 post_init 信号才能收到会话开始(或结束)的通知,然后将该信息保存到您自己的应用程序中的模型中。例如
,当您需要知道会话的年龄时,请使用session.sessiontimer.age()。这将返回一个代表会话年龄的 TimeDelta 对象。
you would need to hook the post_init signal coming from django.contrib.sessions.models.Session to be notified of a session start (or end), and then save that info to a model in your own app. e.g.
hence when you need to know the age of a session, use
session.sessiontimer.age()
. this will return a TimeDelta object representing the age of the session.