1.前言
在上一章节中,我们成功运行了第一个 Flask 应用。虽然只有几行代码,但它背后隐藏着 Web 开发的完整逻辑。
想要从"写 Demo"晋升为"做项目",必须深入理解 Flask 的核心概念。本篇将带你像拆解乐高积木一样,拆解 Flask 的 12 个核心组件。

2.Flask 核心概念概览
在深入细节前,我们可以通过这张图快速了解 Flask 是如何处理一个请求的:

2.1. 路由 (Routing)
路由是 URL 到 Python 函数的 映射表。它告诉 Flask:"当用户访问某个地址时,该由谁来处理"。
python
@app.route('/')
def home():
return '欢迎来到主页!'
@app.route('/about')
def about():
return '这是关于页面。'
@app.route('/'):将根路径绑定到 home 函数。
2.2. 视图函数 (View Functions)
视图函数就是上面代码中的 home 或 about。它们负责处理业务逻辑并返回结果。
python
@app.route('/greet/<name>')
def greet(name):
return f'你好, {name}!'
动态路由 :<name> 可以捕获 URL 中的参数并传递给函数。
2.3. 请求对象 (Request Object)
当浏览器发送请求时,所有的信息(如表单数据、Cookie、URL参数)都被封装在 request 对象中。
python
from flask import request
@app.route('/submit', methods=['POST'])
def submit():
username = request.form.get('username')
return f'收到了用户:{username}'
2.4. 响应对象 (Response Object)
视图函数返回的不只是字符串,还可以是完整的响应对象,包含状态码和响应头。
python
from flask import make_response
@app.route('/custom')
def custom():
response = make_response('自定义响应体')
response.headers['X-Custom-Header'] = 'Flask-Study'
return response
2.5. 模板 (Templates)
为了实现前后端分离,Flask 使用 Jinja2 引擎。你可以在 HTML 中写逻辑:
-
Python 代码:
render_template('hello.html', name=name) -
HTML 模板 (
templates/hello.html):
html
<h1>Hello, {{ name }}!</h1>
2.6. 应用工厂 (Application Factory)
当项目变大时,直接 app = Flask(__name__) 会导致配置困难。应用工厂模式通过一个函数来创建实例:
python
def create_app():
app = Flask(__name__)
# 在这里进行各种初始化配置
return app
2.7. 配置对象 (Configuration)
管理数据库连接字符串、密钥等敏感信息:
python
class Config:
DEBUG = True
SECRET_KEY = 'your_secret_key'
app.config.from_object(Config)
2.8. 蓝图 (Blueprints)
蓝图是模块化开发的利器。它允许你将项目拆分为"用户模块"、"订单模块"等,每个模块都有自己的路由。
python
from flask import Blueprint
user_bp = Blueprint('user', __name__)
@user_bp.route('/profile')
def profile():
return "用户个人资料"
2.9. 静态文件 (Static Files)
CSS、JS、图片等文件统统放在项目根目录下的 static 文件夹中。在 HTML 中引用:
html
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
2.10. 扩展 (Extensions)
Flask 本身很小,但生态极强。
-
Flask-SQLAlchemy:操作数据库。
-
Flask-WTF:处理表单。
-
Flask-Login:处理用户登录。
2.11. 会话 (Sessions)
用于跨页面记住用户信息(如"已登录"状态)。Flask 的 Session 是加密存储在客户端 Cookie 中的。
安全提示 :使用 Session 必须设置强随机性的
app.secret_key。 生成方法:python -c 'import secrets; print(secrets.token_hex())'
2.12. 错误处理 (Error Handling)
Flask 允许你定义错误处理函数,当特定的错误发生时,这些函数会被调用。可以自定义错误页面或处理逻辑。
python
@app.errorhandler(404)
def page_not_found(e):
return 'Page not found', 404
@app.errorhandler(500)
def internal_server_error(e):
return 'Internal server error', 500
@app.errorhandler(404):定义 404 错误的处理函数,返回自定义错误页面。
3.Web开发各部分关系
