首页 > 其他分享 >Flask项目实现-新闻首页

Flask项目实现-新闻首页

时间:2024-03-24 21:11:22浏览次数:16  
标签:index Flask 新闻 self db dict 首页 news id

点击排行展示

  • 在请求根路由时去数据库查询按点击量排行的10条新闻

新闻new模型设计

class News(BaseModel, db.Model):
    """新闻"""
    __tablename__ = "info_news"

    id = db.Column(db.Integer, primary_key=True)  # 新闻编号
    title = db.Column(db.String(256), nullable=False)  # 新闻标题
    source = db.Column(db.String(64), nullable=False)  # 新闻来源
    digest = db.Column(db.String(512), nullable=False)  # 新闻摘要
    content = db.Column(db.Text, nullable=False)  # 新闻内容
    clicks = db.Column(db.Integer, default=0)  # 浏览量
    index_image_url = db.Column(db.String(256))  # 新闻列表图片路径
    category_id = db.Column(db.Integer, db.ForeignKey("info_category.id"))
    user_id = db.Column(db.Integer, db.ForeignKey("info_user.id"))  # 当前新闻的作者id
    status = db.Column(db.Integer, default=0)  # 当前新闻状态 如果为0代表审核通过,1代表审核中,-1代表审核不通过
    reason = db.Column(db.String(256))  # 未通过原因,status = -1 的时候使用
    # 当前新闻的所有评论
    comments = db.relationship("Comment", lazy="dynamic")

    def to_review_dict(self):
        resp_dict = {
            "id": self.id,
            "title": self.title,
            "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S"),
            "status": self.status,
            "reason": self.reason if self.reason else ""
        }
        return resp_dict

    def to_basic_dict(self):
        resp_dict = {
            "id": self.id,
            "title": self.title,
            "source": self.source,
            "digest": self.digest,
            "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S"),
            "index_image_url": self.index_image_url,
            "clicks": self.clicks,
        }
        return resp_dict

    def to_dict(self):
        resp_dict = {
            "id": self.id,
            "title": self.title,
            "source": self.source,
            "digest": self.digest,
            "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S"),
            "content": self.content,
            "comments_count": self.comments.count(),
            "clicks": self.clicks,
            "category": self.category.to_dict(),
            "index_image_url": self.index_image_url,
            "author": self.user.to_dict() if self.user else None
        }
        return resp_dict 

 

后端首页index视图代码

@index_blu.route('/')
def index():
    ...
    # 获取点击排行数据
    news_list = None
    try:
        news_list = News.query.order_by(News.clicks.desc()).limit(constants.CLICK_RANK_MAX_NEWS)
    except Exception as e:
        current_app.logger.error(e)

    click_news_list = []
    for news in news_list if news_list else []:
        click_news_list.append(news.to_basic_dict())

    data = {
        "user_info": user.to_dict() if user else None,
        "click_news_list": click_news_list,
    }

    return render_template('news/index.html', data=data)

  

创建排行榜前三自定义过滤器

def do_class_index(index):

    if index == 0:
        return "first"
    elif index == 1:
        return "second"
    elif index == 2:
        return "third"
    else:
        return ""

 

  • 在 app 创建的函数里面注册过滤器
from info.utils.common import do_index_class
# 添加自定义过滤器
app.add_template_filter(do_index_class, "index_class")

  

 前端index.html进行模板渲染,及通过对span标签使用自定义过滤器对排行前三特别显示

<div class="rank_con fr">
            <div class="rank_title">
                <h3>点击排行</h3>
            </div>
            <ul class="rank_list">
                {% for news in data.click_news_list %}
                    <li><span class="{{ loop.index0 | indexClass }}">{{ loop.index }}</span><a href="#">{{ news.title }}</a></li>
                {% endfor %}
            </ul>
        </div>

  

 

 

 应用效果:

 

 

 

 

总结:

  1、自定义模板过滤器,通过app.add_template_filter(函数名, '过滤器名称')进行注册,  过滤器名称为html使用的名称一致,例如上述例子

      app.add_template_filter(do_index_class, "index_class") 与前端<li><span class="{{ loop.index0 | indexClass }}">{{ loop.index }}</span><a href="#">{{ news.title }}</a></li>

    过滤器名称一致;

 

标签:index,Flask,新闻,self,db,dict,首页,news,id
From: https://www.cnblogs.com/sds2023/p/18093033

相关文章

  • Flask项目实战之-注册实现
    注册后端实现 passport/register请求方式:POST传入参数:JSON格式参数参数名类型是否必须参数说明mobilestring是手机号smscodestring是短信验证码passwordstring是密码返回类型:JSON参数名类型是否必须参数说明errnoint是错误码err......
  • 基于SpringBoot+Vue新闻管理系统设计和实现(源码+LW+部署讲解)
    博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs......
  • uniapp编辑页修改数据后返回到列表页(上一页)或首页,列表页或首页数据不刷新问题
    uniapp编辑页(当前页)等修改数据后返回到列表页(上一页)或多次返回上一页到首页(非上一页),列表页或首页数据不刷新问题解决方法:一、返回到列表页(上一页)1、首先在编辑页的修改数据的成功回调中调用uni.$emit('refreshData');向上一页传递refreshData事件2、然后在列表页(上一......
  • 7*24h新闻自动发送至微信(requests+pywinauto)
    7*24h新闻自动发送至微信(requests+pywinauto)1.爬取新闻列表2.发送至微信指定联系人1.爬取新闻列表目标地址:https://kuaixun.eastmoney.com/获取新闻列表importtime,requests,jsonimportpandasaspdsession=requests.session()headers={'User-Agent'......
  • 第一个Flask项目
    #从flask包中导入Flask类fromflaskimportFlask"""创建一个Flask对象(app)__name__代表app.py这个模块"""app=Flask(__name__)#创建一个路由和视图函数的映射[email protected]('/')defhello_world():return'欢迎来到知了传课!'"""#1.Debug模......
  • 每日一看大模型新闻(2024.1.20-1.21)英伟达新对话QA模型准确度超GPT-4,却遭吐槽:无权重代
    1.产品发布1.1韩国Kakao:推出多模态大模型Honeybee发布日期:2024.1.20KakaounveilsmultimodallargelanguagemodelHoneybee-TheKoreaTimes主要内容:韩国科技巨头Kakao今天宣布他们已经开发了一种名为“蜜蜂”(Honeybee)的多模态大语言模型。据Kakao称,“蜜蜂”能够同时......
  • 前端必学-40个精选案例实战-案例9:企业首页实战项目【PC端网页布局】
    项目首页.psd项目设计图头部导航条的制作资源:html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,......
  • flask-migrate迁移ORM模型
    安装依赖(C:\ProgramData\Anaconda3)C:\Users\ychen>pipinstallflask-migrateLookinginindexes:https://mirrors.aliyun.com/pypi/simple/Collectingflask-migrateDownloadinghttps://mirrors.aliyun.com/pypi/packages/93/01/587023575286236f95d2ab8a826c......
  • 【python】flask服务端响应与重定向处理
    ✨✨欢迎大家来到景天科技苑✨✨......
  • 配置Flask-CLI以便与Flask应用程序一起使用
    第1步:创建Flask应用首先,你需要创建一个新的Flask应用(入口文件)。这可以通过创建一个包含Flask应用实例的Python文件来完成。创建一个名为 main.py 的文件,并在其中定义Flask应用。#main.pyfromflaskimportFlaskapp=Flask(__name__)@app.route('/')defindex():......