不确定如何/在何处操纵Django对象

时间:2013-05-24 05:10:08

标签: python django active-users

好的,所以我对Django很新,对Python也相对较新。在我正在构建的网站中,我正在使用其他人制作的一些中间件来跟踪使用缓存的“在线”用户。这是我所指的中间件     导入日期时间     来自django.core.cache导入缓存     来自django.conf导入设置

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)

我想接受所有在线用户,然后根据他们是在高中还是大学(这是我通过外键向用户提供的个人资料)来划分他们,然后从列表中返回一个随机用户满足这些特定要求的在线用户。我对如何做到这一点感到茫然,因为django结构仍然令我感到困惑。我会在视图中还是在模型中实现它?在查看active_users应用程序的代码后,我发现我可以导入active_users,但我不确定这是列表,数组还是对象。另外我如何确定online_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)

1 个答案:

答案 0 :(得分:0)

使用基于缓存的信息,您需要从数据库中提取用户名才能获得在线用户。 因此,唯一的方法是根据缓存的值过滤UserProfile.objects.all()。 然后就可以了

from random import choice
random_user = choice(online_users)

但是对于那些将看到的信息存储在模型中的请求会更有效。这样您就可以直接执行以下请求:

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

在典型的使用中,你会有很多用户,但有一些在线用户。所以第一个版本会慢得多。