【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)

视图函数就是上面代码中的 homeabout。它们负责处理业务逻辑并返回结果。

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

相关推荐
ding_zhikai1 小时前
【Web应用开发笔记】Django笔记2:一个 Hello World 网页
笔记·后端·python·django
kyle~1 小时前
Python---webbrowser库 跨平台打开浏览器的控制接口
开发语言·python·web
一尘之中2 小时前
量子力学数学基础入门:从态矢到内积外积(附Python演示)
python·ai写作·量子计算
七夜zippoe2 小时前
性能测试实战:Locust负载测试框架深度指南
分布式·python·性能测试·locust·性能基准
有点心急10212 小时前
SQL 执行 MCP 工具开发(一)
人工智能·python·aigc
belldeep2 小时前
python:Flask 3, mistune 2, 实现在线编辑 Markdown 文档的 Web 服务程序
python·flask·markdown·mistune·pygments
apcipot_rain2 小时前
python 多进程多线程 学习笔记
笔记·python·学习
Albert Edison8 小时前
【Python】学生管理系统
开发语言·数据库·python
love530love10 小时前
【ComfyUI】解决 ModuleNotFoundError: No module named ‘inference_core_nodes‘ 问题
人工智能·windows·python·comfyui·inference-core