flask 学习笔记【统计文章的阅读量】


发布时间:2019-02-15 13:08    作者: Uncle Hui   已过去:1 年,4 月   阅读总量:198 已被赞:0


如何统计每篇文章的阅读量呢?在网上查了很多资料,很多人都建议直接采集客户端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




登陆后方可评论