def getUserDataInfo(username): blogList = Blog.objects.filter(auther=User.objects.get( username=username)).filter(draft=False) followkey = generateKey(username, RedisKey['FOLLOWKEY']) fanskey = generateKey(username, RedisKey['FANSKEY']) followcount = 0 fanscount = 0 blogCount = 0 commentCount = 0 pool = ConnectionPool(host='localhost', port='6379', db=0) redis = StrictRedis(connection_pool=pool) if redis.exists(followkey): followcount = redis.scard(followkey) if redis.exists(fanskey): fanscount = redis.scard(fanskey) for blog in blogList: blogCount = blogCount + 1 commentCount = commentCount + blog.commentcount messagekey = generateKey(username, RedisKey['UNREADMSGKEY']) if redis.exists(messagekey): msgcount = redis.llen(messagekey) else: msgcount = 0 pool.disconnect() userdataInfo = { 'followcount': followcount, 'fanscount': fanscount, 'blogcount': blogCount, 'commentcount': commentCount, 'msgcount': msgcount } return userdataInfo
def follow(request, followusername): try: currentUser = request.user except Users.DoesNotExist: return HttpResponseRedirect(reverse('users:pleaselogin')) except KeyError: return HttpResponseRedirect(reverse('users:pleaselogin')) currentUsername = currentUser.username if currentUser: followkey = generateKey(currentUsername, RedisKey['FOLLOWKEY']) fanskey = generateKey(followusername, RedisKey['FANSKEY']) pool = ConnectionPool(host='localhost', port='6379', db=0) redis = StrictRedis(connection_pool=pool) if redis.exists(followkey): if redis.sismember(followkey, followusername): return HttpResponseRedirect( reverse('blogs:content', kwargs={'blogId': request.session['currblogId']})) else: redis.sadd(followkey, followusername) redis.sadd(fanskey, currentUsername) else: redis.sadd(followkey, followusername) redis.sadd(fanskey, currentUsername) pool.disconnect() return HttpResponseRedirect( reverse('blogs:content', kwargs={'blogId': request.session['currblogId']}))
def setreaded(request): try: currentUser = request.user messagekey = generateKey(currentUser.username, RedisKey['UNREADMSGKEY']) pool = ConnectionPool(host='localhost', port='6379', db=0) redis = StrictRedis(connection_pool=pool) if redis.exists(messagekey): redis.delete(messagekey) except Exception as e: pass return HttpResponseRedirect(reverse('users:messagebox'))
def saveComment(request): comment_content = request.POST['blogcomment'] blog = Blog.objects.get(pk=request.session['currblogId']) result_info = '' try: auther = User.objects.get(username=request.user.username) except: auther = User.objects.get(username='******') try: mycomment = Comment.create(blog, comment_content, auther, datetime.datetime.now()) blogId = request.session['currblogId'] pool = ConnectionPool(host='localhost', port='6379', db=0) redis = StrictRedis(connection_pool=pool, decode_responses=True) commentcount_key = generateKey(blogId, RedisKey['COMMENTCOUNTKEY']) if redis.exists(commentcount_key): redis.incr(commentcount_key) else: redis.set(commentcount_key, blog.commentcount) redis.incr(commentcount_key) # blog.commentcount = blog.commentcount + 1 # blog.save() mycomment.save() blog.commentcount = redis.get(commentcount_key) blog.save() # Publish message to auther when new comment added(with redis) messagekey = generateKey(blog.auther.username, RedisKey['UNREADMSGKEY']) message_content = auther.username + u'评论了博客' + blog.title + u'于' + str( datetime.datetime.now()) redis.lpush(messagekey, message_content) result_info = 'Success' except ValidationError as e: result_info = 'Fail' return HttpResponseRedirect( reverse('blogs:content', kwargs={'blogId': request.session['currblogId']}))
def thumbup(request): try: currentUser = request.user except KeyError: return render(request, 'users/pleaselogin.html') except Users.DoesNotExist: return render(request, 'users/pleaselogin.html') blogId = request.session['currblogId'] blog = Blog.objects.get(pk=blogId) auther = blog.auther.username userthumb_key = generateKey(currentUser.username, RedisKey['THUMBUPKEY']) blogthumb_key = generateKey(blogId, RedisKey['THUMBCOUNTKEY']) pool = ConnectionPool(host='localhost', port='6379', db=0) redis = StrictRedis(connection_pool=pool, decode_responses=True) title = '' countOfThumb = 0 messagekey = generateKey(auther, RedisKey['UNREADMSGKEY']) # 每个读者不能给同一篇文章多次点赞 if redis.sismember(userthumb_key, blogId): pass else: redis.sadd(userthumb_key, blogId) if redis.exists(blogthumb_key): redis.incr(blogthumb_key) else: redis.set(blogthumb_key, countOfThumb) redis.incr(blogthumb_key) message_content = currentUser.username + u'点赞了博客' + blog.title + u'于' + str( datetime.datetime.now()) redis.lpush(messagekey, message_content) pool.disconnect() return HttpResponseRedirect( reverse('blogs:content', kwargs={'blogId': request.session['currblogId']}))
def messagebox(request): try: currentUser = request.user pool = ConnectionPool(host='localhost', port='6379', db=0) redis = StrictRedis(connection_pool=pool) messagekey = generateKey(currentUser.username, RedisKey['UNREADMSGKEY']) if redis.exists(messagekey): infos = redis.lrange(messagekey, 0, redis.llen(messagekey) - 1) msginfos = [] for msg in infos: msg = msg.decode() msginfos.append(msg) messages = {'infos': msginfos} else: messages = {} # infos = InfoMessage.objects.filter(attachUser=currentUser) except Exception as e: messages = {} return render(request, 'users/messagebox.html', messages)
def content(request, blogId): pool = ConnectionPool(host='localhost', port='6379', db=0) redis = StrictRedis(connection_pool=pool, decode_responses=True) currentusername = request.user.username blog = Blog.objects.get(id=blogId) title_key = generateKey(blogId, RedisKey['TITLEKEY']) readcount_key = generateKey(blogId, RedisKey['READCOUNTKEY']) if redis.exists(title_key): blog_title = redis.get(title_key).decode() else: redis.set(title_key, blog.title) blog_title = redis.get(title_key).decode() blog_content = blog.content countOfThumb = 0 blogthumb_key = generateKey(blogId, RedisKey['THUMBCOUNTKEY']) if redis.exists(blogthumb_key): countOfThumb = redis.get(blogthumb_key).decode() userthumb_key = generateKey(currentusername, RedisKey['THUMBUPKEY']) thumbflag = 'F' if redis.exists(userthumb_key): if redis.sismember(userthumb_key, blogId): thumbflag = 'T' pool.disconnect() comment = Comment.objects.filter(attachedblog=blog) request.session['currblogId'] = blogId # blog_title = blog.title # blog_content = blog.content blogContent = { 'blog_title': blog_title, 'content': blog_content, 'comment_list': comment, 'countOfThumb': countOfThumb, 'thumbupflag': thumbflag, 'auther': blog.auther, 'curruser': request.user } userdataInfo = getUserDataInfo(blog.auther.username) blogContent = {**blogContent, **userdataInfo} # blog.readcount+=1 # blog.save() readblog_key = generateKey(currentusername, RedisKey['READBLOGKEY']) readblogIdlist = [] response = render(request, 'blogs/content.html', blogContent) if readblog_key in request.COOKIES: readblogIdlist = request.COOKIES.get(readblog_key).split(',') if blogId not in readblogIdlist: if redis.exists(readcount_key): redis.incr(readcount_key) else: redis.set(readcount_key, blog.readcount) redis.incr(readcount_key) else: if redis.exists(readcount_key): redis.incr(readcount_key) else: redis.set(readcount_key, blog.readcount) redis.incr(readcount_key) blog.readcount = redis.get(readcount_key).decode() blog.save() # 添加cookie readblogIdlist.append(blogId) readblogIdStr = ','.join(readblogIdlist) response.set_cookie(readblog_key, readblogIdStr, 60) return response