【Flask 框架学习】02:核心基本概念全解析

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开发各部分关系

相关推荐
佳心于琪几秒前
CTFshow——phpCVE
web·ctfshow·phpcve
答案是你1 分钟前
YOLOE 开放词汇检测 + ONNX / TensorRT 推理,开源了!
python·深度学习·yolo·目标检测·计算机视觉·视觉检测
2601_962885726 分钟前
AlphaFeed 支持哪些 K 线周期?period参数怎么传?
前端·数据库·python
老歌老听老掉牙10 分钟前
基于 Python 的顺次文本拼接:以 MCD 数控文件为例
python·数控·mcd
朝朝辞暮i11 分钟前
VLA 系统学习第 7 课:loss.backward() 到底做了什么?——从计算图到反向传播
人工智能·python·深度学习·神经网络·vla
外收内放29 分钟前
Python基础语法练习题(53-54)
python·学习
聪明蛋子哟37 分钟前
Python与Java双栈实战:手撸一个支持RAG与Tool Calling的高性能Agent框架
java·开发语言·python
databook1 小时前
什么是范数?用 NumPy 动手算一遍就明白了
python·数学·numpy
朝朝辞暮i1 小时前
VLA 系统学习第 5 课:神经网络的参数到底是什么?——从 nn.Linear 真正理解 W、 b 和 Gradient
人工智能·python·深度学习·神经网络·vla
XZ-0700011 小时前
week7-文本
python