如何统计每篇文章的阅读量呢?在网上查了很多资料,很多人都建议直接采集客户端IP和文章ID,再统计次数,经过老弟及自己的不懈努力吧(因为我是小白)终于实现了,
现在来说说具体操作:
在models.py也就是模型里,建立一直采集IP和文章ID的表,我是这样写的:
#定义IP采集表字段,用于统计阅读次数
class Read_ip(db.Model):
__tablename__ = 'read_ip' #表名
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
ip = db.Column(db.String(100), nullable=False) #标签名字段
question_id=db.Column(db.String(100), nullable=False)
然后通过命令将表写入数据库。
在主APP里,的内容页路由里这样写:
1.引入表,我这里是 Read_ip
from models import User,Question,Pinlun,Tag ,Read_ip#模型都要倒进来
2.引入and_
from sqlalchemy import or_,and_
3.路由里做出判读:
@app.route('/neirongye/<neirongye_id>') #通过文章ID来获取内容,所以给一个参数<neirongye_id>
def neirongye(neirongye_id):
question_model = Question.query.filter(Question.id == neirongye_id).first()
#获取用户IP
ip=request.remote_addr #获取用户IP
zhenip= Read_ip.query.filter(and_(Read_ip.ip == ip, Read_ip.question_id == neirongye_id )).first()
#and_ 表和,于python的用法稍有不同,应该写在前面。这里是判读IP 和 文章ID如果在表里已经存在,就不在重复写入
if zhenip == None:
user_ip = Read_ip(ip=ip, question_id=neirongye_id)
db.session.add(user_ip)
db.session.commit()
elif zhenip:
print u"重复了"
else:
user_ip = Read_ip(ip=ip, question_id=neirongye_id)
db.session.add(user_ip)
db.session.commit()
yuedus=Read_ip.query.filter(Read_ip.question_id==neirongye_id).all()
return render_template('neirongye.html',question_model = question_model,yuedus=yuedus)
4.页面前端这样写:
阅读:{{yuedus|length}}
0
登陆后方可评论