在Django中计算用户等级的最佳方法是什么

时间:2012-11-09 09:55:58

标签: python django sorting

我有一个用django编写的网站。网站的用户根据他们的积分获得积分和排名。

class Profile(UserenaBaseProfile):
    points = models.IntegerField(default=100)
    rank = models.PositiveIntegerField(...)

当用户获得积分时,他/她的等级将被改变,因此其他用户也将改变。 问题是计算用户等级的最佳方法是什么,何时应该计算或经常计算?

感谢。

1 个答案:

答案 0 :(得分:1)

每次单个用户的积分增加时,可能不是更新每个用户等级的最佳方法。如果你有很多用户,那么后端会很苛刻。

如果您想在个人资料页面上显示用户排名,或许您可以查询获取按点排序的所有用户的列表,请将其单独存储为字典或其他内容并对其进行大量缓存。这样做会更好。

所以假设您的用户列表看起来像是这样(1111等是用户ID):

USERS = { 1111: {'username': 'iskorum', 'points':99999 }, 2222: {'username': 'sidarcy', 'points':9444 }, 3333: {'username': 'joeblogs', 'points':37 } }

当涉及到实际获得用户排名时,您只需在此存储的词典中找到用户位置即可。

假设用户ID为1111

userrank = [i + 1表示i,x表示枚举(已排序(USERS)),如果x == 1111]

返回1

无需额外的数据库查询

如果只有一个小网站,每次获取用户列表并查找当前用户在该列表中的位置无害。

但是,如果您期望成千上万的用户可能是更好的方法。

编辑:您还应该缓存已排序的列表,如下面的注释中所述 每次排序列表都会占用大量内存

相关问题