好的,所以我对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)
答案 0 :(得分:0)
使用基于缓存的信息,您需要从数据库中提取用户名才能获得在线用户。
因此,唯一的方法是根据缓存的值过滤UserProfile.objects.all()
。
然后就可以了
from random import choice
random_user = choice(online_users)
但是对于那些将看到的信息存储在模型中的请求会更有效。这样您就可以直接执行以下请求:
online_users = UserProfile.objects.filter(seen__lte=now-timeout)
在典型的使用中,你会有很多用户,但有一些在线用户。所以第一个版本会慢得多。