Flask项目(新闻网站)—— 新闻详情页(点击量累加,用户代码封装)

本文介绍了如何在Flask项目中构建新闻详情页面,实现点击量累加功能,并对用户代码进行封装。通过在news模块创建info目录,注册蓝图,定义视图函数来处理详情页的请求。同时,在info目录的utils子目录下,对comment.py进行更新,以处理用户评论。此外,还更新了index目录的views.py中的index函数,与前台detail.html配合,完成新闻详情展示及交互功能。
摘要由CSDN通过智能技术生成

首先在modules目录,新建一个目录‘news’(关于新闻详情页的后台)

news目录,init.py

from flask import Blueprint

news_blue = Blueprint('news_blue',__name__,url_prefix="/news")

from . import views

info目录,init.py(蓝图注册)

    from info.modules.news import news_blue
    app.register_blueprint(news_blue)

news目录,views.py(详情页的视图函数)

@news_blue.route("/detail/<int:id>")
@get_user
def detail(id):
    """
    1.获取用户信息
    2.获取新闻排行相关内容
    3.查询新闻数据
    4.点击量累加
    :param id: 
    :return: 
    """

    # # 1.获取用户信息
    # user_id = session.get('id')
    #
    #
    # user = None
    # try:
    #     user = User.query.filter_by(id=user_id).first()
    # except Exception as e:
    #     current_app.logger.error(e)
    #     abort(500)
    user = g.user
    # 2.获取新闻排行相关内容

    news_clicks = []
    try:
        news_clicks = News.query.order_by(News.clicks.desc()).limit(6)
    except Exception as e:
        current_app.logger.error(e)
        abort(500)

    # 3.查询新闻数据
    news = None
    try:
        news = News.query.filter_by(id=id).first()
    except Exception as e:
        current_app.logger.error(e)
        abort(500)

    # 4.点击量累加
    if news:
        news.clicks += 1
        try:
            db.session.commit()
        except Exception as e:
            current_app.logger.error(e)
            db.session.rollback()
            abort(500)

    context = {
   
        "user": user,
        "news_clicks": news_clicks,
        "news":news

    }
    return render_template('news/detail.html',context=context)

用户代码封装,info目录下的utils目录,comment.py,添加如下代码

def get_user(func):
    def wrapper(*args,**kwargs):
        # 1.获取用户信息
        user_id = session.get('id')

        user = None
        try:
            user = User.query.filter_by(id=user_id).first()
        except Exception as e:
            current_app.logger.error(e)
            abort(500)
        g.user = user
        return func(*args,**kwargs)
    return wrapper

index目录,views.py(找到相关的用户代码,index函数)

    # user_id = session.get('id')
    # user = None
    # try:
    #     user = User.query.filter_by(id=user_id).first()
    # except Exception as e:
    #     current_app.logger.error(e)
    #     abort(500)
    user = g.user

前台修改

detail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文章详情页</title>
    <link rel="stylesheet" type="text/css" href="../../static/news/css/reset.css">
    <link rel="stylesheet" type="text/css" href="../../static/news/css/main.css">
    <script type="text/javascript" src="../../static/news/js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript" src="../../static/news/js/detail.js"></script>
    <script type="text/javascript" src="../../static/news/js/main.js"></script>
</head>
<body>
<div class="header_con">
    <div class="header">
        <a href="#" class="logo fl"><img src="../../static/news/images/logo.png" alt="logo"></a>
        {% if context.user %}
            <div class="user_login fr">
                <img src="../../static/news/images/person01.png" class="lgin_pic">
                <a href="#">{
  { context.user.nick_name }}</a>
                <a href="/passport/logout" onclick="logout()">退出</a>
            </div>
        {% else %}
            <div class="user_btns fr">
                <a href="javascript:;" class="login_btn">登录</a> / <a href="javascript:;" class="register_btn">注册</a>
            </div>
        {% endif %}
    </div>
</div>

<div class="conter_con">
    <div class="
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值