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

相关推荐
rgb2gray18 小时前
论文详解 | TWScan:基于收紧窗口的增强扫描统计,实现不规则形状空间热点精准检测
网络·人工智能·python·pandas·交通安全·出租车
小鸡吃米…18 小时前
Python线程同步
开发语言·数据结构·python
清水白石00818 小时前
Python 弱引用深度解析——让缓存不再成为内存泄漏的温床
java·python·缓存
zzb158018 小时前
RAG from Scratch-优化-routing
java·前端·网络·人工智能·后端·python·mybatis
sea121618 小时前
Flask配置MySQL连接信息的最佳实践
python·mysql·flask
XW010599918 小时前
5-6统计工龄
数据结构·python·算法
酱紫学Java18 小时前
数据安全比赛:Python 内置函数实战指南
后端·python·网络安全
廿一夏18 小时前
数据存储容器
python
SNWCC18 小时前
autodl_M000_pytorch
人工智能·pytorch·python
deephub19 小时前
多智能体系统的三种编排模式:Supervisor、Pipeline 与 Swarm
人工智能·python·大语言模型·agent