我希望有人可以帮助我.
我正在尝试在我的网站主页上实现一个"在线用户数"计数器.我记得在ASP过去的糟糕时期,我曾经能够通过session.onstart和session.onend保持计数器.
我如何在Django中做到这一点?
干杯
丰富
django信号非常方便:
# this is in a models.py file
from django.db.models.signals import pre_delete
from django.contrib.sessions.models import Session
def sessionend_handler(sender, **kwargs):
# cleanup session (temp) data
print "session %s ended" % kwargs.get('instance').session_key
pre_delete.connect(sessionend_handler, sender=Session)
Run Code Online (Sandbox Code Playgroud)
您需要定期删除会话,因为如果用户没有点击最常见情况下的"注销",他们可以留在数据库中.只需将其添加到cron:
*/5 * * * * djangouser /usr/bin/python2.5 /home/project/manage.py cleanup
Run Code Online (Sandbox Code Playgroud)
另外我通常将它添加到我的manage.py中以便于settings.py路径查找:
import sys
import os
BASE_DIR = os.path.split(os.path.abspath(__file__))[0]
sys.path.insert(0, BASE_DIR)
Run Code Online (Sandbox Code Playgroud)
SESSION_EXPIRE_AT_BROWSER_CLOSE有效,但仅影响客户端cookie,而不影响服务器活动会话IMHO.
from django.contrib.sessions.models import Session
import datetime
users_online = Session.objects.filter(expire_date__gte = datetime.datetime.now()).count()
Run Code Online (Sandbox Code Playgroud)
当然,这只适用于Sessions的数据库存储.任何更深奥的东西,比如memcache,都需要你自己动手.
| 归档时间: |
|
| 查看次数: |
5680 次 |
| 最近记录: |