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

相关推荐
科技苑9 小时前
Python简单网络爬虫教程
爬虫·python
典典分享指南9 小时前
用飞书 Wiki 搭内容作战室:从零搭建团队内容协作中枢
django·flask·numpy·pyqt
刺客码12 小时前
Layui 表格固定列行高错位问题解决方案
前端框架·layui·jquery·web
Patrick在香港12 小时前
Claude Prompt 香港场景:公文里「今日」落在 6 个日历日上,「翌日」锚错了 5 天
python·自然语言处理·正则表达式·claude·数据清洗
YsyaaabB12 小时前
Python 数值分析
python
阿洛学长12 小时前
计算机二级 Python 基本操作题(15 分)真题笔记(0101 ~ 1903 全套)
python·pycharm
weixin1997010801613 小时前
[特殊字符]️《二手ERP对接电商平台的总体方案:统一数据模型 + 事件驱动 + 灰度上线6原则》(附Python源码)
大数据·python
滚雪球~13 小时前
量化交易 防止Windows电脑自动更新并重启
python·量化
L@ncor14 小时前
第二章可能出现的问题
人工智能·python
y = xⁿ15 小时前
大模型基础概念
python