能跑起来的最小后端只需30行代码:定义路由、用内存列表模拟数据、render_template渲染HTML、显式声明methods=['GET','POST']处理表单、启用debug=True实现热重载。

能跑起来的最小后端,30行代码足够——不需要数据库、不配Nginx、不写迁移脚本,app.py一个文件就能处理文章增删查、渲染HTML页面。关键不是“全功能”,而是先让路由通、模板动、数据进得去出得来。
怎么让首页和文章页同时跑起来
Flask 的核心就两件事:定义 URL 路由 + 返回渲染结果。别一上来就建 models.py 或连 SQLite,先用内存列表模拟数据,验证流程是否闭环。
-
posts = []放在模块顶层,作为临时文章容器 -
@app.route('/')返回index.html,传入posts列表 -
@app.route('/post/<post_id>')</post_id>用路径参数取单篇文章,配合render_template('post.html', post=...) - 确保
templates/目录存在,且index.html里有{% for post in posts %}循环逻辑
表单提交后文章怎么存进变量或文件
用户填完标题和内容点“发布”,后端必须接住 request.form,否则数据就丢了。常见错误是漏掉 methods=['GET', 'POST'] 或没检查请求方法。
- 路由必须显式声明
methods=['GET', 'POST'],否则 POST 请求会 405 - 在函数内用
if request.method == 'POST'分支处理提交逻辑 - 简单方案:把
request.form['title']和request.form['content']组成字典,append()进posts - 稍进一步:用
json.dump()写入posts.json文件,重启服务也不丢数据(注意加ensure_ascii=False)
为什么本地调试时改了代码页面不更新
默认 Flask 不自动重载,你改了 app.py 或模板,浏览器刷新还是旧内容——这不是缓存问题,是开发服务器没开热重载。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
立即学习“Python免费学习笔记(深入)”;
- 启动命令必须带
debug=True和use_reloader=True(后者在 debug=True 时默认开启,但显式写上更稳) - 正确写法:
app.run(debug=True, host='127.0.0.1', port=5000) - 如果用了
flask run命令,要加--debug参数,否则只开调试器,不重载 - 模板修改有时需清浏览器缓存(Ctrl+F5),因为 Flask 默认不禁止静态资源缓存
SQLite 初始化失败或找不到 blog.db
一旦决定落地存储,SQLAlchemy 的初始化顺序和上下文最容易出错。不是模型写错了,而是 db.create_all() 没在正确时机执行。
-
db = SQLAlchemy(app)后必须加with app.app_context(): db.create_all(),否则表根本不会建 -
SQLALCHEMY_DATABASE_URI值写成'sqlite:///blog.db'(三个斜杠),少一个就会路径解析失败 - SQLite 文件默认生成在项目根目录,不是
instance/下——除非你显式配置了instance_relative_config=True并用os.path.join(app.instance_path, 'blog.db') - 首次运行报错
no such table,大概率是漏了create_all()或模型类没被 import 触发注册
最常被跳过的一步:每次新增模型字段(比如给 Post 加 category 字段),不能只改 Python 类——SQLite 不支持 ALTER COLUMN,得删库重来,或者用 Flask-Migrate 管理变更。没意识到这点的人,往往卡在“字段明明写了却查不到值”。

















