def random_walk(request): articleid = redis_conn.srandmember(Article.ALL_PRIMARY_IDS_KEY) article = Article.objects.filter(id=articleid).first() if article is None: raise Http404 return render(request, "web/random_walk.html", { "article": article, })
def random_article(request): ''' put all primary article id to the redis redis[all] = set(1,2,3) put all user read in redis redis[user] = set(1,2, 3) consider use sdiff: r.sdiff(keys=('local', 'mythtv')) ''' # use request.user # if we need to collect anonymous user data if request.user.is_authenticated(): article_id_sets = redis_conn.sdiff((Article.ALL_PRIMARY_IDS_KEY, request.user.id)) or 0 if article_id_sets == 0: raise Http404 article_id = random.sample(article_id_sets, 1)[0] redis_conn.sadd(request.user.id, article_id) UserReadArticle.objects.get_or_create(user=request.user, article_id=article_id) else: article_id = redis_conn.srandmember(Article.ALL_PRIMARY_IDS_KEY) or 0 return redirect("/api/article/%s/"%article_id)