fix #7; added UsersOnline middleware
This commit is contained in:
parent
b4d4ee2155
commit
50498826a4
4 changed files with 43 additions and 13 deletions
|
@ -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)
|
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -89,6 +89,7 @@ MIDDLEWARE_CLASSES = (
|
|||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'account.middleware.AuthKeyMiddleware',
|
||||
'forum.middleware.LastLoginMiddleware',
|
||||
'forum.middleware.UsersOnline',
|
||||
)
|
||||
|
||||
ROOT_URLCONF = 'urls'
|
||||
|
|
Reference in a new issue