Flask 笔记二:先把项目结构搭清楚

很多人学 Flask,第一步是跟着教程写一个 app.py,里面几十行代码,路由、数据库、登录全塞在一起。能跑,但再加几个页面就开始乱。

这篇不讲复杂架构,只讲一件事:Flask 项目怎么从「一个文件」变成「几个文件夹」。下面例子来自我自己的练习项目,但会把具体业务名字都拿掉,只保留 Flask 本身该怎么组织。


1. 先认识 Flask 里最常用的三个概念

① 应用(App)

整个网站的「总入口」。你可以理解成:Flask 程序从这里启动。

from flask import Flask

app = Flask(name)

② 路由(Route)

用户访问某个网址时,该执行哪段代码。

@app.route("/")

def index():

return "Hello"

③ 蓝图(Blueprint)

当路由变多以后,不要全写在一个文件里。Blueprint 就是:把不同模块的路由分开写,再挂到主应用上。

比如:

  • 前台页面 → 一个 Blueprint
  • 后台管理 → 一个 Blueprint

这样代码不会越堆越长。


2. 入门项目可以这样分文件夹

刚开始不用搞很复杂,下面这种结构就够用了:

myproject/

├── manage.py # 启动文件

├── app/

│ ├── init.py # 创建 Flask 应用

│ ├── models.py # 数据库模型(后面再学)

│ ├── home/ # 前台

│ │ ├── init.py

│ │ └── views.py

│ └── admin/ # 后台

│ ├── init.py

│ └── views.py

你可以把它理解成:

  • manage.py:负责启动
  • app/__init__.py:负责「组装」
  • home/admin/:负责「具体页面」

3. 启动文件:manage.py

入门阶段,manage.py 可以非常简单:

from app import app

if name == "main":

app.run(debug=True)

运行:

python manage.py

浏览器打开 http://127.0.0.1:5000 就能看到页面。


4. 主文件:app/__init__.py

这个文件建议只做「组装」,不要写太多业务逻辑。

from flask import Flask

app = Flask(name)

简单配置(入门阶段够用)

app.config"SECRET_KEY" = "dev-secret-key"

注册 Blueprint

from app.home import home

from app.admin import admin

app.register_blueprint(home)

app.register_blueprint(admin, url_prefix="/admin")

这里有两个重点:

  1. 先创建 app
  2. 再注册 Blueprint

顺序别反了,后面 import 多了不容易报错。


5. Blueprint 怎么写

前台模块 app/home/__init__.py

from flask import Blueprint

home = Blueprint("home", name)

import app.home.views

前台页面 app/home/views.py

from flask import render_template

from app.home import home

@home.route("/")

def index():

return render_template("home/index.html")

后台模块也类似

app/admin/__init__.py

from flask import Blueprint

admin = Blueprint("admin", name)

import app.admin.views

app/admin/views.py

from flask import render_template

from app.admin import admin

@admin.route("/")

def index():

return render_template("admin/index.html")

注册时加了:

app.register_blueprint(admin, url_prefix="/admin")

所以后台首页地址是:

/admin/

不是 /


6. 模板放哪里

Flask 默认模板目录一般是:

app/templates/

例如:

app/templates/

├── home/

│ └── index.html

└── admin/

└── index.html

home/index.html 可以很简单:

<!DOCTYPE html>

<html>

<head>

<title>首页</title>

</head>

<body>

<h1>欢迎来到我的网站</h1>

<a href="/admin/">进入后台</a>

</body>

</html>

到这里,你已经完成了:

  • 一个首页
  • 一个后台页
  • 两个模块分开管理

这对入门来说,已经是很重要的一步了。


7. 新手最容易踩的 3 个坑

坑 1:所有代码都写在一个文件里

刚开始可以,但页面一多就会乱。

建议超过 3 个页面,就开始拆 Blueprint。

坑 2:路由名字重复

Blueprint 里的 endpoint 会自动带上前缀,比如:

  • home.index
  • admin.index

跳转时要用:

url_for("home.index")

url_for("admin.index")

不要想当然地写 "index"

坑 3:改代码后页面没变化

开发时建议开:

app.run(debug=True)

这样改代码后会自动重载。

如果还是不对,先重启一次服务。


8. 你现在应该掌握什么

看完这篇,你不需要会数据库、登录、部署。

只要先明白这 4 件事:

  1. Flask 应用从 Flask(__name__) 开始
  2. 路由用 @route 绑定 URL
  3. Blueprint 用来拆分模块
  4. 模板放在 templates/

这就够你搭一个「能看、能点、能分前台后台」的小网站了。