尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【Python项目实战】综合项目(四):Web展示、搜索与统计
上篇M2交卷,数据库里的文章都有了AI摘要——但还躺在SQLite里,只有你能通过终端看到。今天M3——把它变成一个真正的网站。不只有首页和详情页,还要有搜索、统计、分页、错误页。🎯本篇成品:一个多页面博客式站点——首页分页 + 详情页 + 搜索 + 统计 + 自定义错误页。含注释约220行。📌 太长不看版(给想快速上手的你)项目信息一句话说明里程碑M3·Web展示、搜索与统计代码行数~220行(含注释)依赖flask核心功能分页列表 + 详情 + 搜索 + 统计 + 404/500跑起来的命令flask --app web.app run --debug核心知识点Flask路由、Jinja2模板继承、分页、SQL聚合做完你能得到一个能发给朋友看的早报站一、从开始到这里:差的是“完整产品”之前的博客有首页和详情页,但离“能给别人用”还差:功能博客AI摘要那篇本篇首页列表✅ 有✅ 有 +分页详情页✅ 有✅ 有 +相关推荐搜索❌ 没有✅ 按标题和摘要搜统计❌ 没有✅ 总量、日增、来源分布错误页❌ 默认✅ 自定义404、500导航栏❌ 简单✅ 全站导航 + 激活状态空状态❌ 没处理✅ 友好提示📌这一篇的差别不在“会不会Flask”,在“有没有把它当产品做”。二、目录结构与本篇范围python_daily/ ├── web/ │ ├── __init__.py │ ├── app.py # 🚪 Flask入口(本篇) │ ├── templates/ │ │ ├── base.html # 全站骨架(本篇) │ │ ├── index.html # 首页分页(本篇) │ │ ├── detail.html # 详情页(本篇) │ │ ├── search.html # 搜索页(本篇) │ │ ├── stats.html # 统计页(本篇) │ │ └── errors/ │ │ ├── 404.html │ │ └── 500.html │ └── static/ │ └── style.css # 样式(本篇) ├── core/storage.py # 存储层(需扩展分页/搜索/统计函数) └── ...🎯本篇只做Web展示。自动化部署在第32篇。三、第1步:扩展存储层——给Web层准备数据接口之前的storage.py只有基础查询,Web层需要更多:"""core/storage.py —— 追加Web层需要的数据接口"""defquery_page(conn,page:int=1,per_page:int=10)-list[tuple]:"""分页查询:第page页,每页per_page条"""offset=(page-1)*per_pagereturnconn.execute("SELECT id, title, url, source, date, summary FROM articles ""ORDER BY id DESC LIMIT ? OFFSET ?",(per_page,offset)).fetchall()defcount_all(conn)-int:"""文章总数(已存在)"""returnconn.execute("SELECT COUNT(*) FROM articles").fetchone()[0]defsearch_articles(conn,keyword:str)-list[tuple]:"""按关键词搜标题和摘要"""like=f"%{keyword}%"returnconn.execute("SELECT id, title, url, source, date, summary FROM articles ""WHERE title LIKE ? OR summary LIKE ? ORDER BY id DESC",(like,like)).fetchall()defstats_by_source(conn)-list[tuple]:"""各来源的文章数(GROUP BY)"""returnconn.execute("SELECT source, COUNT(*) FROM articles ""GROUP BY source ORDER BY COUNT(*) DESC").fetchall()defstats_by_day(conn)-list[tuple]:"""按日期统计文章数(取最近7天)"""returnconn.execute("SELECT DATE(created_at) as d, COUNT(*) FROM articles ""GROUP BY d ORDER BY d DESC LIMIT 7").fetchall()defquery_related(conn,article_id:int,source:str,limit:int=3)-list[tuple]:"""相关推荐:同来源的其他文章"""returnconn.execute("SELECT id, title FROM articles WHERE source = ? AND id != ? ""ORDER BY id DESC LIMIT ?",(source,article_id,limit)).fetchall()📌 四个新接口各司其职接口给谁用query_page首页分页列表search_articles搜索页stats_by_source+stats_by_day统计页query_related详情页的相关推荐💡DAO模式的好处在这里体现:Web层只调函数,不写SQL。将来换数据库只改storage.py。四、第2步:base.html——全站骨架与导航!DOCTYPEhtmlhtmllang="zh-CN"headmetacharset="UTF-8"metaname="viewport"content="width=device-width, initial-scale=1.0"title{% block title %}Python早报{% endblock %}/titlelinkrel="stylesheet"href="{ { url_for('static', filename='style.css') }}"/headbodyheadernavaclass="brand"href="{ { url_for('index') }}"🐍 Python早报/adivclass="links"ahref="{ { url_for('index') }}"class="{ { 'active' if request.endpoint == 'index' }}"首页/aahref="{ { url_for('stats') }}"class="{ { 'active' if request.endpoint == 'stats' }}"统计/aformclass="search-form"action="{ { url_for('search') }}"method="get"inputtype="text"name="q"placeholder="搜索文章…"/
RELATED

相关推荐

研究生数学建模竞赛赛题资源解压与实战全攻略

研究生数学建模竞赛赛题资源解压与实战全攻略

1. 赛题资源获取与解压码机制拆解1.1 为什么这类资源总带着一个解压码参加过研究生数学建模竞赛的人都有一个共同体验:从各种渠道拿到赛题压缩包之后,第一件事不是打开看题,而是先找解压码。2021年第十八届中国研究生数学建模竞赛的赛题资源在…

📅 2026/9/26 21:53:56
ax编排实战:Agent、K8s与CLI三层架构与避坑指南

ax编排实战:Agent、K8s与CLI三层架构与避坑指南

1. 从"ax"这个标题说起:一个被低估的编排入口第一次看到"ax"这个标题,很多人会以为是某个命令行工具的缩写,或者某个内部代号。但结合热搜词里的 agentic、orchestrator、Kubernetes、CLI 这几个关键词,基本可…

📅 2026/9/26 21:53:56
SpringBoot+Vue医疗服务系统源码实战:从环境搭建到挂号并发避坑

SpringBoot+Vue医疗服务系统源码实战:从环境搭建到挂号并发避坑

简介:这是一套基于SpringBootVue的医疗服务系统完整源码与数据库,面向计算机、通信、人工智能、自动化等相关专业的在校学生与教师,尤其适合作为毕业设计、期末课程设计或课程大作业的参考方案。项目为个人毕设作品,答辩评审分达9…

📅 2026/9/26 21:53:56
MORE NEWS

更多资讯

📰

网站营销单页面留言表单设计避坑指南含源码下载

网站营销单页面留言表单设计避坑指南含源码下载 网站做好了没人访问,90%是因为落地页留资体验太差。很多SEO从业者盯着关键词排名,却忽略了用户点击进来的那一秒。如果页面加载慢、表单字段多、提交无反馈,流量再多也白搭。…

📰

SQL行值比较:从复合索引到深分页优化的利器

写 SQL 写了五年,从子查询到窗口函数,从递归 CTE 到各种奇葩优化,我自认为已经玩得挺熟了。但第一次看到(a, b) > (x, y)这种写法时,我盯着屏幕愣了好一会儿——等等,SQL 里还能这么比较?这不是 Python …

📰

电脑字体显示错误全解析:从原理到多场景排查修复指南

打开文档满屏问号,把设计稿发给客户对方看到一堆方框,CAD图纸打开标注重重叠叠全是问号,同一个文件在自己电脑显示正常、换台电脑就乱码——这就是典型的“电脑字体显示错误”。遇到过这类问题的人都清楚,它看起来是个小毛病&…

📰

避开3大坑!wordpress美术馆插件搭建全攻略与注意事项

避开3大坑!wordpress美术馆插件搭建全攻略与注意事项 想做个展示作品的网站,但看着满屏代码就头大?别慌,我懂你的难处。自己不会代码想做网站,却总被各种技术门槛卡住脖子,这是很多设计师、摄影师和画廊老板的共同痛点。其实,利用…

📰

做旅行社的都是在哪网站拿票3个技巧搞定性能优化

做旅行社的都是在哪网站拿票3个技巧搞定性能优化 网站做好了没人访问,是不是觉得钱白花了?别急,问题可能不在流量,而在 性能优化…

📰

从像素到笔画:srt-whiteboard-animation骨架笔迹追踪实现(Zhang-Suen细化+8邻接追踪)

从像素到笔画:srt-whiteboard-animation骨架笔迹追踪实现(Zhang-Suen细化8邻接追踪) 【免费下载链接】srt-whiteboard-animation 将 SRT 字幕做成暖米黄纸张底的流式笔迹白板手绘动画 skill:mask 分区遮罩编排 stream 连续笔迹&a…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬