Flask是Python生态中非常轻量的Web框架,核心只提供路由、请求处理和基础扩展机制,适合用来快速验证想法或搭建中小规模服务。通过一个具体实例,我们可以清晰看到从零到跑通接口的全过程。

一、项目初始化与依赖管理
开始之前,建议先建立独立的虚拟环境,避免不同项目的包版本互相干扰。使用venv创建环境后,再通过pip安装Flask即可。很多初学者直接全局安装,导致后期升级某个库时影响其他项目,这是典型的依赖污染问题。
安装完成后,项目最基础的结构可以只有app.py一个文件。但随着功能变多,应当拆出配置、视图和模型目录。下面给出最小依赖文件示例,方便他人复现环境。
# requirements.txt Flask==2.3.3
在入口文件中,我们只需要从flask包引入Flask类,实例化后就能得到应用对象。这个对象负责注册路由和启动服务,所有请求都由它内部的分发器处理。
二、编写第一个路由与视图函数
路由是Web框架最核心的概念,它把用户访问的URL映射到具体的Python函数。在Flask中,使用装饰器语法就能完成绑定,写法直观且易于理解。下面的代码展示了一个返回JSON的接口和一个渲染页面的接口。
注意视图函数必须返回可序列化的内容或Response对象,如果直接返回字典,Flask会自动转为JSON响应。这对写前后端分离接口非常友好,不需要手动调用jsonify也能跑通简单场景。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/api/hello')
def api_hello():
# 直接返回字典,Flask会自动处理为JSON
return {'message': 'hello from flask'}
@app.route('/')
def index():
# 渲染templates目录下的index.html
return render_template('index.html', title='任务管理')
if __name__ == '__main__':
app.run(debug=True)
上述代码中,@app.route装饰器接收URL规则,框架在收到对应请求时调用函数。debug=True开启后,代码改动会自动重载,并暴露错误栈,但生产环境必须关闭该选项。
三、使用模板渲染动态页面
纯接口服务之外,Flask自带Jinja2模板引擎,可以在HTML中嵌入变量与控制语句。我们在项目根目录新建templates文件夹,放入index.html,就能通过render_template传参渲染。
模板里用双大括号输出变量,用百分号语法写循环或判断。这样前端页面和后端逻辑解耦,比在Python里拼接字符串安全且易维护。以下示例列出任务清单。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<ul>
{% for task in tasks %}
<li>{{ task }}</li>
{% endfor %}
</ul>
</body>
</html>
对应的视图需传入tasks列表,否则模板会因变量缺失报错。这种服务端渲染适合后台管理系统,若做公开高并发站点,建议改为前端框架接管视图。
四、用蓝图拆分业务模块
当接口增多,把所有路由写在app.py会导致文件膨胀。Flask提供蓝图(Blueprint)机制,把一类功能独立成模块再注册到应用。下面示例创建task蓝图,处理任务相关接口。
蓝图不直接运行,只是在定义阶段收集路由,最后由app.register_blueprint挂载。这样目录清晰,也方便多人协作。对比单文件写法,蓝图在可测试性和复用性上优势明显。
from flask import Blueprint, jsonify
task_bp = Blueprint('task', __name__)
@task_bp.route('/api/tasks')
def list_tasks():
data = [{'id': 1, 'name': '写文档'}, {'id': 2, 'name': '测接口'}]
return jsonify(data)
# 在app.py中注册
# from task import task_bp
# app.register_blueprint(task_bp)
通过蓝图,我们能把用户、订单、任务等不同领域分开维护。配合工厂函数创建app,还可以针对测试环境加载不同配置,提升工程规范度。
五、运行与常见误区
本地启动只需执行python app.py,访问127.0.0.1:5000即可看到页面。新手常把debug模式带进生产,或在视图里写死文件路径,这些都会引发安全隐患和部署失败。
另一个误区是认为Flask不能做大型项目。实际上配合扩展如Flask-SQLAlchemy、Flask-Migrate,它完全能支撑复杂业务,重点在于合理规划结构和配置,而不是框架本身的限制。
| 写法 | 适用场景 | 维护成本 |
|---|---|---|
| 单文件路由 | demo、小工具 | 低,但难扩展 |
| 蓝图拆分 | 多模块服务 | 中,结构清晰 |
| 工厂函数+配置类 | 生产级应用 | 较高,但规范 |
综上,用Flask快速搭建Python Web项目并不复杂,掌握路由、模板与蓝图后,就能从容应对多数开发需求。建议从最小可用版本起步,再逐步引入扩展与分层设计。
FlaskPython_Web路由修改时间:2026-08-01 12:18:29