Flask 入门到实战:手把手带你构建第一个 Python Web 应用
一、前言:为什么选择 Flask?
在 Python Web 开发领域,常见的框架包括 Flask、Django、FastAPI 等。 如果你是初学者,Flask 是最适合你的入门框架之一。它轻量、灵活、文档完善,上手门槛低,并且足够强大,支持构建中型以上的生产级应用。
本篇博客将带你从零开始,逐步理解 Flask 的开发逻辑,并构建一个简单可运行的 Web 应用。
二、开发环境准备
1. 安装 Python
确保你已经安装了 Python 3.7+。可以通过以下命令确认:
bash
python3 --version
2. 创建虚拟环境(推荐)
bash
python3 -m venv venv
source venv/bin/activate # macOS / Linux
venv\Scripts\activate # Windows
3. 安装 Flask
bash
pip install flask
三、Flask 快速上手:Hello, World!
创建一个名为 app.py
的文件,输入以下代码:
bash
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run(debug=True)
在PyCharm中,当你创建了flask项目就会自动生成上述文件。

然后运行:
bash
python app.py
打开浏览器,访问 http://127.0.0.1:5000,就能看到页面上显示:
Hello World!
你已经成功搭建了一个最基本的 Flask 应用。
四、核心概念详解
1. Flask 应用对象
python
app = Flask(__name__)
这是 Flask 应用的核心,创建了一个应用实例。
2. 路由与视图函数
py
@app.route('/')
def hello():
return 'Hello, Flask!'
路由负责将 URL 映射到对应的函数(即"视图")。例如访问 /
就会触发 hello()
函数。
3. debug=True
的作用(重要)
让 Flask 在开发过程中自动重载代码并提供调试信息。我们开启这个模式就可以避免重复启动与关闭。
五、添加 HTML 模板
Flask 支持 Jinja2 模板引擎。我们来构建一个带 HTML 页面响应的例子。
1. 创建目录结构:
md
project/
├── app.py
└── templates/
└── index.html
2. 修改 app.py
:
py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
3. 创建 templates/index.html
:
html
<!DOCTYPE html>
<html>
<head>
<title>Flask Demo</title>
</head>
<body>
<h1>欢迎来到 Flask 世界!</h1>
</body>
</html>
重新运行 Flask 应用后访问首页,你将看到一个简单的 HTML 页面。
六、表单处理与请求参数
我们扩展一个表单输入功能:
app.py
新增路由:
py
from flask import request
@app.route('/greet', methods=['GET', 'POST'])
def greet():
if request.method == 'POST':
name = request.form['name']
return f'你好,{name}!'
return '''
<form method="post">
你的名字:<input type="text" name="name">
<input type="submit">
</form>
'''
这是 Web 开发的关键步骤:接收用户输入并生成动态响应。
七、如何继续学习?
Flask 虽然轻量,但功能不简单。下节将继续深入学习以下内容:
使用 SQLAlchemy 打造可持久化的数据层
八、总结
通过本篇文章,我们完成了以下内容:
- 理解了 Flask 的核心概念
- 编写了第一个 Web 应用
- 使用了模板渲染 HTML
- 实现了表单输入和数据响应
Flask 是学习 Web 开发的一把钥匙,未来你可以用它构建博客、后台管理系统、API 服务,甚至是部署 AI 模型的接口~****