您的位置:首页 > Web前端

基本滴简易的feed系统

2014-04-12 21:51 169 查看
模仿之前的Feedly框架,后台消息序列用django-rq,

整个过程就是简单滴生成一个活动-创建一个Activity类,一个用来把活动分发到用户friends的分发函数,然后在需要的时候,把活动传入分发函数中,由消息队列-这里

是django-rq,来调度它

Activity-活动类

from django.contrib.auth import get_user_model

class Activity(object):

def __init__(self, object_id, muser, user_name, c_date, thumbcontent, mobject_id, mtitle, verb):
self.object_id = object_id
self.muser = muser
self.user_name = user_name
self.date = c_date
self.thumbcontent = thumbcontent
self.mobject_id = mobject_id
self.mtitle = mtitle
self.verb = verb

def get_object_id(self):
return self.object_id

def get_muser(self):
return self.muser

def get_user_name(self):
return self.user_name

def get_date(self):
return self.c_date

def get_thumbcontent(self):
return self.thumbcontent

def get_mobject_id(self):
return self.mobject_id

def get_mtitle(self):
return self.mtitle

def set_real_user(self):
self.ruser = get_user_model().objects.get(pk=self.muser)

def get_verb(self):
return self.verb


在视图里面,将feed加入消息队列

feed_obj = tmp_obj.create_activity()
feed_list = self.request.user.friends.all()
redis_c = get_redis_connection('feed_storage')
feed_queue.enqueue(distr_object, feed_obj, feed_list = feed_list)


将feed分发给要friends

def distr_object(t_object, feed_list):
redis_c = get_redis_connection('feed_storage')
pickle_object = pickle.dumps(t_object)
for i in feed_list:
redis_c.lpush(i.id, pickle_object)


这里在feed在redis存储的是列表,列表名简单的就是user的id值

在用户的个人页面,简单滴从redis获取用户的feed,然后显示出来

class FeedPage(ListView):
template_name = 'myapp/index.html'
model = MyObject
paginate_by = 30
context_object_name = 'feedobject'

def get_queryset(self):
redis_c = get_redis_connection('feed_storage')
user_feed = []
for i in redis_c.lrange(self.request.user.id,0,30):
j = pickle.loads(i)
j.set_real_user()
user_feed.append(j)
return user_feed
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  feed python django feedly