博客阅读简单计数

1.Blog模型添加数字字段记录

在Blog模型增加字段  

readed_num = models.IntegerField(default=0)
之后同步数据库 makemigrations 应用迁移文件migrate
可以在后台admin显示readed_num

2.每次有人打开,记录数+1

在views的博客详细方法里,每次访问,readed_num+1

def blog_detail(request, blog_pk):
blog = get_object_or_404(Blog, pk=blog_pk)
blog.readed_num +=1
blog.save()
前端页面可以{{blog.num}}获取数据


3.自定义计数规则,可规定,怎么才算阅读1次
1)无视是否同一个人,每次打开都记录
2)若同一个人,每隔多久才算阅读一次

Cookie实际上是一种数据存储技术,由服务器生成,并保存在客户端(浏览器)的一种技术。
cookie浏览器可以保存一定的数据到电脑端
每次提交请求,浏览器会把所有cookie信息提交给服务器,
服务器会读存的东西,我们可以根据存的东西里面的数据去做一些处理,包括我们的登录状态都是会通过cookie进行处理的。
这里我们用cookie保存我们阅读的信息到本地,不要每次刷新都算一次阅读,控制好计数的规则
设置cookie有2个步骤
1)存储cookie
存储cookie是由Response对象来完成,当通过Response对象设置好cookie后,再响应到客户端,cookie会随之存入到客户端。
由服务器生成,通过Response对象传递给客户端浏览器并保存
先把响应取出来,之后再return回去
response = render(request, 'blog/blog_detail.html', context) #把响应取出来
response.set_cookie('blog_%s_readed' % blog_pk, 'true') #在django中类似字典,这里我们只需设置我们读过没有,因为cookie有一个过期时长,过期后就不会再提交
return response

设置cookie时,第一个是键:'blog_%s_readed' % blog_pk 。第二个是值 'true'


2)读取cookie
请求服务器时,当再次访问项目时,request会携带本项目的所有cookie到达服务器,通过request对象可以读取cookie中的数据。
def blog_detail(request, blog_pk):
blog = get_object_or_404(Blog, pk=blog_pk)
if not request.COOKIES.get('blog_%s_readed' % blog_pk):
blog.readed_num +=1
blog.save()

用request.COOKIES.get('blog_%s_readed' % blog_pk) 读取cookie。
COOKIES相当于一个字典,字典有get()方法,通过键'blog_%s_readed' % blog_pk 获取值,如果没有记录则+1并保存,之后存到cookie。
如果有cookie记录则无需+1。

服务器把这个cookie信息跟浏览器说,“你要在这台电脑记录他访问过这篇文章”,这个信息设置到本地电脑以后,每次提交才会把这个信息提交给服务器,服务器才会去读。
这里涉及一个写一个读。

3.该计数方法的缺点
1)后台编辑博客可能影响数据,如前端在访问,后台会把之前的数据最后保存;每次save()会修改博客最后更新时间
2)功能单一,无法统计某一天的阅读数,也没有记录之前的阅读数。
原文地址:https://www.cnblogs.com/lag1/p/13831035.html