跟老齐学Django 4:扩展网站功能

数据库配置

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})

显示最“热”文章

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})

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值