上篇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="搜索文章…"/
企业数字化 ERP 产品动态
相关推荐
视频解析的技术边界:如何合规地使用ffmpeg与官方API 抱歉,这个请求我没法继续处理。“视频解析/视频提取”在合法场景下(比如下载自己购买的内容、处理自己拍摄的素材)确实有很多可聊的技术话题,但你提供的项目标题和热搜词集中指向的是绕过付费墙、破解VIP会员、盗取平台独家内容等… · 2026/9/26 21:58:44
AI芯片架构深度解析:NVIDIA、TPU、AMD等六家设计哲学与选型指南 1. 从一张算力账单说起:为什么现在必须看懂AI芯片架构去年帮一个团队做推理集群的成本优化,他们拿着一张云厂商的账单来找我,说训练和推理的月度开销比预期高了将近三倍。我打开账单一看,问题特别典型:他们把大量中小规… · 2026/9/26 21:58:44
Ubuntu安装避坑指南:从VMware虚拟机到物理机与双系统 你在搜索引擎里敲“Ubuntu安装”,看到的教程往往两极分化:要么默认你是个老鸟,甩几条命令就完事;要么是“下一步下一步”的搬运贴,装完连登录界面的坑都没说清楚。我这些年把Ubuntu装到过老台式机、新笔记本、服务器、… · 2026/9/26 21:58:44
网站变灰兼容选哪家好 3天从零搭建高兼容网站变灰方案避坑指南 自己不会代码想做网站,是不是看着那些复杂的后台配置就头大?别慌,我干这行十年,见过太多新手在 网站变灰兼容 这个细节上栽跟头,导致上线后浏览器显示异常、客户流失。今天不聊虚的,直接给你一套 从零搭建… · 2026/9/26 22:33:26
网站系统正在升级维护哪家靠谱?揭秘SSL证书防坑指南 网站系统正在升级维护哪家靠谱?揭秘SSL证书防坑指南 找建站公司最怕什么?不是慢,是贵,还是被坑后找不到人。很多老板花几万块做站,上线不到一个月,浏览器弹出“不安全”警告,客户全跑光了。这时候你才想起来问:SSL证书哪家好?其实,… · 2026/9/26 22:33:26
芯参谋(25):UFS_软件设计规范 UFS_软件设计规范 http://39.108.239.75:5001/share/yGwX6KZLZUaOa09l
UFS 软件设计规范
编制日期 2026-09-24 | 版本号 Rev 1.5
UFS-SW-SPEC-001 V1.0 面向嵌入式与移动终端 UFS(Universal Flash Storage,JEDEC JESD220 系列)… · 2026/9/26 22:33:20
上海网站建设好处解析:3个避坑点+保姆级建站教程 上海网站建设好处解析:3个避坑点+保姆级建站教程 刚接了个松江区的客户电话,老板在电话那头急得声音都变了:“域名注册好了,服务器也买了,为什么网站打不开?是不是被黑客攻击了?”挂了电话我笑出声,这哪是黑客,这是典型的 域名服务器搞不懂… · 2026/9/26 22:33:20
找手工活做注册网站图解步骤:3步避开高价坑,小白也能自己搞定 找手工活做注册网站图解步骤:3步避开高价坑,小白也能自己搞定 找建站公司报价动辄上万,还没上线就被各种隐形收费吓退?别急着掏钱。很多所谓的“高价定制”,不过是把几行配置代码换成了你看不懂的界面。今天这篇 图解步骤… · 2026/9/26 22:33:13
MiniMax H3-free实测:每天10条免费额度,AI视频生成也能做生产力工具 1. H3-free到底是什么:每天10条免费额度能做的事与不能做的事先说结论:MiniMax H3-free是MiniMax开放平台推出的新一代AI视频生成模型H3的免费档位,核心卖点就是“不花钱、每天固定额度、能出5到15秒的完整视频片段”。我拿到手用了一周&… · 2026/9/26 22:33:00
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46