fix #7; added UsersOnline middleware

This commit is contained in:
slav0nic 2009-04-03 23:38:12 +03:00
parent b4d4ee2155
commit 50498826a4
4 changed files with 43 additions and 13 deletions

View file

@ -1,11 +1,16 @@
from datetime import datetime, timedelta
from django.core.cache import cache
from django.utils import translation
from django.conf import settings as global_settings
from forum import settings
from forum import settings as forum_settings
class LastLoginMiddleware(object):
def process_request(self, request):
cache.set(str(request.user.id), True, forum_settings.USER_ONLINE_TIMEOUT)
if request.user.is_authenticated():
cache.set(str(request.user.id), True, forum_settings.USER_ONLINE_TIMEOUT)
class ForumMiddleware(object):
def process_request(self, request):
@ -21,3 +26,24 @@ class ForumMiddleware(object):
request.session['django_language'] = profile.language
translation.activate(profile.language)
request.LANGUAGE_CODE = translation.get_language()
class UsersOnline(object):
def process_request(self, request):
now = datetime.now()
delta = now - timedelta(minutes=settings.USER_ONLINE_TIMEOUT)
if request.user.is_authenticated():
users_online = cache.get('users_online', {})
users_online[request.user.id] = now
for user_id in users_online:
if users_online[user_id] < delta:
del users_online[user_id]
cache.set('users_online', users_online, 60*60*24)
else:
guests_online = cache.get('guests_online', {})
guest_sid = request.COOKIES.get(global_settings.SESSION_COOKIE_NAME, '')
guests_online[guest_sid] = now
for guest_id in guests_online:
if guests_online[guest_id] < delta:
del guests_online[guest_id]
cache.set('guests_online', guests_online, 60*60*24)

View file

@ -21,7 +21,7 @@ TAGLINE = get('TAGLINE', 'Django based forum engine')
DEFAULT_MARKUP = get('DEFAULT_MARKUP', 'bbcode')
NOTICE = get('NOTICE', '')
HOST = get('HOST', 'localhost:8000')
USER_ONLINE_TIMEOUT = get('USER_ONLINE_TIMEOUT', 30)
USER_ONLINE_TIMEOUT = get('USER_ONLINE_TIMEOUT', 15)
EMAIL_DEBUG = get('FORUM_EMAIL_DEBUG', False)
# GRAVATAR Extension

View file

@ -13,8 +13,12 @@ from django.core.cache import cache
from django.utils import translation
from forum.util import render_to, paged, build_form, paginate, set_language
from forum.models import Category, Forum, Topic, Post, Profile, Read, Reputation, Report, PrivateMessage
from forum.forms import AddPostForm, EditPostForm, UserSearchForm, PostSearchForm, ReputationForm, MailToForm, EssentialsProfileForm, PersonalProfileForm, MessagingProfileForm, PersonalityProfileForm, DisplayProfileForm, PrivacyProfileForm, ReportForm, UploadAvatarForm, CreatePMForm
from forum.models import Category, Forum, Topic, Post, Profile, Read,\
Reputation, Report, PrivateMessage
from forum.forms import AddPostForm, EditPostForm, UserSearchForm,\
PostSearchForm, ReputationForm, MailToForm, EssentialsProfileForm,\
PersonalProfileForm, MessagingProfileForm, PersonalityProfileForm,\
DisplayProfileForm, PrivacyProfileForm, ReportForm, UploadAvatarForm, CreatePMForm
from forum.markups import mypostmarkup
from forum.templatetags import forum_extras
from forum import settings as forum_settings
@ -23,13 +27,12 @@ from forum.index import post_indexer
@render_to('forum/index.html')
def index(request, full=True):
users_online = []
#TODO: refactoring
for user in User.objects.all():
if cache.get(str(user.id)):
users_online.append(user)
guest_count = len(cache._cache) - len(users_online)
users_cached = cache.get('users_online', {})
users_online = User.objects.filter(id__in = users_cached.keys()) and users_cached or []
guests_cached = cache.get('guests_online', {})
guest_count = len(guests_cached)
users_count = len(users_online)
#users_total_online = guest_count + users_count
cats = {}
forums = {}
@ -47,7 +50,7 @@ def index(request, full=True):
'topics': Topic.objects.count(),
'users': User.objects.count(),
'users_online': users_online,
'online_count': len(users_online),
'online_count': users_count,
'guest_count': guest_count,
'last_user': User.objects.order_by('-date_joined')[0],
}
@ -57,7 +60,7 @@ def index(request, full=True):
'topics': Topic.objects.count(),
'users': User.objects.count(),
'users_online': users_online,
'online_count': len(users_online),
'online_count': users_count,
'guest_count': guest_count,
'last_user': User.objects.order_by('-date_joined')[0],
}, 'forum/lofi/index.html'

View file

@ -89,6 +89,7 @@ MIDDLEWARE_CLASSES = (
'django.contrib.auth.middleware.AuthenticationMiddleware',
'account.middleware.AuthKeyMiddleware',
'forum.middleware.LastLoginMiddleware',
'forum.middleware.UsersOnline',
)
ROOT_URLCONF = 'urls'