0

好的,所以我对 Django 很陌生,对 Python 也比较陌生。在我正在构建的网站中,我正在使用其他人制作的一些中间件来跟踪使用缓存的“在线”用户。这是我指的中间件 import datetime from django.core.cache import cache from django.conf import settings

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)
4

1 回答 1

0

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

from random import choice
random_user = choice(online_users)

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

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

在典型的使用中,您将拥有很多用户,但只有少数在线用户。所以第一个版本会非常慢。

于 2013-05-24T05:27:30.123 回答