版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QFire/article/details/82938080
数据库配置
users_like = models.ManyToManyField(User, related_name="articles_like", blank=True)
多对多的关系
./mysite/settings.py
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_DB = 0
./article/list_views.py
import redis
from django.conf import settings
r = redis.StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=settings.REDIS_DB)
Redis对于键的命名并没有强制的要求,比较好的做法是用“对象类型:对象ID:对象属性”,如使用键article:15:views来存储ID为15的文章的浏览次数
def article_detail(request, id, slug):
articles = get_object_or_404(ArticlePost, id=id, slug=slug)
total_views = r.incr('article:{}:views'.format(article.id))
return render(request, "article/list/article_detail.html", {"articles":articles,
"total_views":total_views})
显示最“热”文章
扫描二维码关注公众号,回复:
3432828 查看本文章
def article_detail(request, id, slug):
articles = get_object_or_404(ArticlePost, id=id, slug=slug)
total_views = r.incr('article:{}:views'.format(article.id))
r.zincrby('article_ranking', article.id, 1)
article_ranking = r.zrange('article_ranking', 0, -1, desc=True)[:10]
article_ranking_ids = [int(id) for id in article_ranking]
most_viewed = list(ArticlePost.objects.filter(id__in = article_ranking_ids))
most_viewed.sort(key=lambda x: article_ranking_ids.index(x.id))
return render(request, "article/list/article_detail.html", {"articles":articles,
"total_views":total_views, "most_viewed": most_viewed})