2013-05-24 2 views
0

Итак, я очень новичок в Django и относительно новичок в Python. На веб-сайте, который я создаю, я использую некоторое промежуточное программное обеспечение, которое кто-то еще сделал, чтобы отслеживать «онлайн» пользователей, используя кеш, чтобы сделать это. Вот промежуточное я имею в виду импорта DateTime из django.core.cache кэша импорта из django.conf параметров импортаНе знаете, как и где манипулировать объектами Django

class ActiveUserMiddleware: 

    def process_request(self, request): 
     current_user = request.user 
     if request.user.is_authenticated(): 
      now = datetime.datetime.now() 
      cache.set('seen_%s' % (current_user.username), now, 
         settings.USER_LASTSEEN_TIMEOUT) 

Я хочу взять все интернет-пользователи, а затем разделить их на основе будь то в старшей школе или колледже (что объясняется тем, что я дал пользователям через внешний ключ профиль), а затем вернуть случайного пользователя из списка онлайн-пользователей, которые отвечают этим определенным требованиям. Я не понимаю, как это сделать, потому что структура джанго все еще меня путает. Будет ли я реализовывать это в представлении или в модели? Посмотрев код для приложения active_users, я понял, что могу импортировать active_users, но я не уверен, что это список, массив или объект. Также как определить количество онлайн-пользователей? Делает что-то вроде online_users.length? Вот код, который я привел до сих пор: (для краткости я пропустил некоторые другие импорты и представления). Мне жаль, что я не придумал много кода сам по себе, я просто застрял/расстроен. Любая помощь приветствуется.

from online_status.status import CACHE_USERS 
from online_status.utils import encode_json 
from django.contrib.auth.models import User 
from django.core.cache import cache 
from django.template.context import RequestContext 

def send_to(request): 
    sender = request.user 
    sender_level = sender.username 
    online_users = cache.get(CACHE_USERS) 
    match_users=[] 
    for User in online_users: 
     if User.username == sender_level: 
      match_users.append(user) 

    random_user = choice(match_users) 
    html = "<html> <body> <p> User: %s % random_user </p></body></html>" % random_user 
    return render_to_response(html) 

ответ

0

С помощью информации, полученной на основе кеша, вам нужно извлечь имя пользователя из базы данных, чтобы иметь возможность получать онлайн-пользователей. Таким образом, единственный способ - отфильтровать UserProfile.objects.all() на основе значения кеша. Затем вы можете сделать

from random import choice 
random_user = choice(online_users) 

Но было бы более эффективными для тех видов запросов, чтобы хранить увиденные данные в вашей модели. Таким образом, вы можете напрямую сделать запрос, например:

online_users = UserProfile.objects.filter(seen__lte=now-timeout) 

В обычном использовании у вас будет много пользователей, но несколько пользователей онлайн. Таким образом, первая версия будет намного медленнее.

+0

Как я могу извлечь список онлайн-пользователей из CACHE_USERS? Не является ли список пользователей онлайн-пользователей CACHE_USERS? Я обновил то, что теперь выглядит в моем представлении, но я получаю сообщение об ошибке. Объект «OnlineStatus» не имеет атрибута «имя пользователя». –

+0

Nevermind Я понял это. –

+0

Хорошо, в то же время я сделал тоже, поэтому для полноты: 'для статуса в online_users: if status.user.username == ...' – deufeufeu

Смежные вопросы