我有个django应用。该应用程序是一个普通的应用程序。对我来说一切都运行得很好。
我现在想实现一个排行榜。阅读几个redis帮助你做到这一点的地方。真的很棒。所以我在服务器上安装并配置了redis。
我的用户配置文件的最小表示为:
class UserProfile(models.Model):
user = models.OneToOneField(User)
invited_friends = models.BooleanField(default=False)
filled_wishlist = models.BooleanField(default=False)
upvote = models.IntegerField()
downvote = models.IntegerField()
@property
def reputation(self):
return int(confidence_fixed(self.upvote, self.downvote)*100)根据这个声誉属性,我得到一个值。所有这些都发生在PostgreSQL数据库后端。
现在我要做的是,将这些分数放入redis键值存储中,并生成排行榜。有一个非常棒的redis库用来实现排行榜:https://github.com/agoragames/leaderboard-python
所以我的问题是,假设我的redis服务器在XXX.XXX.XX.XX:6342上运行,我如何将我的python/django应用程序连接到redis服务器,并更新KV商店,一旦有一些数字,我如何获取视图和显示?
发布于 2013-05-15 00:36:07
我认为您使用排行榜-python库是正确的。
首先,您需要编写一个一次性脚本,使用leaderboard-python将数据从您的模型移动到redis。
# Create a new leaderboard
reputation_lb = Leaderboard('reputation')
for profile in UserProfile.objects.all():
reputation.rank_member('user_%i' % profile.user.pk, profile.reputation)您还需要在UserProfile模型上创建另一个属性,以便从leaderboard-python检索声誉。
然后,您很可能希望更新分数,或者复制数据库中的信息并继续使用您的声誉属性来更新排行榜,或者只需增加/减少存储在redis中的分数。
leaderboard-python库的自述文件非常好,应该包含构建该库所需的所有示例。
发布于 2014-08-02 17:11:40
对于未来的googlers来说,告诉Leaderboard如何连接到redis服务器的方法是在Leaderboard构造函数中指定更多的参数:
reputation_lb =排行榜(‘声誉’,host="xyz.com",port="1234")
有关支持哪些选项的更多详细信息,请在排行榜的构造函数代码中找到:http://pydoc.net/Python/leaderboard/2.8.0/leaderboard/
https://stackoverflow.com/questions/16537490
复制相似问题