文档
Flask Hello World —— 你的第一个 Flask 应用
目标
创建一个最小的 Flask Web 应用,理解:
- Flask 应用实例的创建
- 路由装饰器的使用
- 请求-响应基本流程
- 开发服务器的启动
完整代码
# app.py
from flask import Flask, request, jsonify
# 创建 Flask 应用实例
app = Flask(__name__)
# ---------- 路由定义 ----------
@app.route("/")
def index():
"""首页 —— 返回 HTML"""
return """
<h1>🚀 Hello, Flask!</h1>
<p>欢迎来到 Flask 世界。</p>
<ul>
<li><a href="/hello">/hello</a> — 纯文本问候</li>
<li><a href="/hello?name=Vibe">/hello?name=Vibe</a> — 带参数问候</li>
<li><a href="/api/status">/api/status</a> — JSON 状态接口</li>
</ul>
"""
@app.route("/hello")
def hello():
"""纯文本问候,支持查询参数 name"""
name = request.args.get("name", "World")
return f"Hello, {name}!"
@app.route("/api/status")
def api_status():
"""RESTful JSON 状态接口"""
return jsonify({
"status": "ok",
"version": "1.0.0",
"framework": "Flask"
})
@app.route("/user/<username>")
def user_profile(username):
"""动态路由 —— URL 变量"""
return jsonify({
"username": username,
"message": f"欢迎你,{username}!"
})
# ---------- 错误处理 ----------
@app.errorhandler(404)
def not_found(error):
return jsonify({"error": "资源未找到"}), 404
# ---------- 启动入口 ----------
if __name__ == "__main__":
# debug=True 开启热重载,代码修改后自动重启
app.run(host="0.0.0.0", port=5000, debug=True)
运行步骤
# 1. 确保虚拟环境已激活(终端前缀为 (venv))
# 2. 设置环境变量(也可在代码中直接 run)
# Linux/macOS:
export FLASK_APP=app.py
export FLASK_ENV=development
# Windows (CMD):
set FLASK_APP=app.py
set FLASK_ENV=development
# Windows (PowerShell):
$env:FLASK_APP="app.py"
$env:FLASK_ENV="development"
# 3. 启动
flask run
# 或者直接运行
python app.py
# 4. 浏览器访问
# http://localhost:5000/
# http://localhost:5000/hello?name=Vibe
# http://localhost:5000/api/status
# http://localhost:5000/user/alice
预期输出
访问 http://localhost:5000/api/status 返回:
{
"status": "ok",
"version": "1.0.0",
"framework": "Flask"
}
访问 http://localhost:5000/hello?name=Vibe 返回:
Hello, Vibe!
关键要点
| 概念 | 说明 |
|---|---|
Flask(__name__) |
创建 WSGI 应用实例,__name__ 用于定位资源 |
@app.route(path) |
装饰器语法,将 URL 路径绑定到视图函数 |
<variable> |
动态路由变量,自动传入函数参数 |
request.args |
查询参数字典 ?key=value |
jsonify() |
将 dict 转为 JSON 响应,并设 Content-Type |
debug=True |
开启调试模式,代码修改后自动重载 |