Flask 核心知识点速查手册
📌 基础篇
1. Flask 应用结构
python
复制代码
from flask import Flask
app = Flask(__name__) # 创建应用实例
@app.route("/") # 路由装饰器
def index():
return "Hello World"
if __name__ == "__main__":
app.run(debug=True) # 启动服务器
2. 路由系统
python
复制代码
# 基础路由
@app.route("/")
# 动态路由
@app.route("/user/<username>")
@app.route("/post/<int:id>")
# 多方法支持
@app.route("/api", methods=["GET", "POST"])
3. 请求处理
python
复制代码
from flask import request
# 获取请求数据
request.method # 请求方法
request.args # GET参数
request.form # 表单数据
request.json # JSON数据
request.headers # 请求头
4. 响应处理
python
复制代码
# 返回字符串
return "文本"
# 返回JSON
return {"key": "value"} # Flask自动转为JSON
# 自定义状态码
return jsonify(data), 201
# 重定向
from flask import redirect
return redirect("/new-url")
📌 模板篇
5. 模板渲染
python
复制代码
from flask import render_template
# 渲染模板并传参
return render_template("index.html", name="John", items=items)
6. Jinja2 模板语法
html
复制代码
<!-- 变量 -->
{{ variable }}
<!-- 循环 -->
{% for item in items %}
{{ item }}
{% endfor %}
<!-- 条件 -->
{% if condition %}
<p>条件成立</p>
{% endif %}
<!-- 安全输出HTML -->
{{ html_content|safe }}
7. 模板继承
html
复制代码
<!-- base.html -->
<html>
<body>
{% block content %}{% endblock %}
</body>
</html>
<!-- child.html -->
{% extends "base.html" %}
{% block content %}
<h1>子页面内容</h1>
{% endblock %}
📌 进阶篇
8. 动态路由参数
python
复制代码
# 字符串参数
@app.route("/<username>")
def profile(username):
return f"用户: {username}"
# 类型转换器
@app.route("/post/<int:post_id>") # int, float, path, uuid
@app.route("/<any(blog,article):section>/<id>")
9. 请求钩子(Middleware)
python
复制代码
@app.before_request
def before_each_request():
# 每个请求前执行
pass
@app.after_request
def after_each_request(response):
# 每个请求后执行
return response
10. 错误处理
python
复制代码
@app.errorhandler(404)
def page_not_found(error):
return "页面不存在", 404
@app.errorhandler(500)
def server_error(error):
return "服务器错误", 500
📌 数据篇
11. 处理JSON数据
python
复制代码
# 发送JSON请求
import requests
requests.post(url, json={"key": "value"})
# 接收JSON数据
@app.route("/api", methods=["POST"])
def api():
data = request.get_json() # 获取JSON数据
return jsonify(data) # 返回JSON响应
12. 表单处理
python
复制代码
from flask import request
@app.route("/submit", methods=["POST"])
def submit():
username = request.form.get("username")
password = request.form.get("password")
return f"用户: {username}"
📌 外部API集成
13. 调用外部API
python
复制代码
import requests
# GET请求
response = requests.get(url, params=params)
data = response.json()
# POST请求
response = requests.post(url, json=data)
# 添加请求头
headers = {"Authorization": "Bearer token"}
response = requests.get(url, headers=headers)
14. 错误处理与超时
python
复制代码
try:
response = requests.get(url, timeout=5)
response.raise_for_status() # 检查状态码
data = response.json()
except requests.Timeout:
return "请求超时"
except requests.RequestException as e:
return f"请求失败: {e}"
📌 项目结构
15. 基础项目结构
复制代码
项目名称/
├── app.py # 主应用文件
├── requirements.txt # 依赖列表
├── templates/ # 模板目录
│ └── index.html
├── static/ # 静态文件
│ ├── css/
│ ├── js/
│ └── images/
└── README.md
16. requirements.txt 示例
txt
复制代码
Flask==2.3.3
requests==2.31.0
python-dotenv==1.0.0
📌 实战代码片段
17. 猜数字API
python
复制代码
@app.route("/<guess>")
def guess_number(guess):
try:
guess = int(guess)
if guess == 41:
return {"correct": True, "message": "恭喜!"}
return {"correct": False, "message": "再试试"}
except:
return {"error": "请输入数字"}
18. 待办事项列表
python
复制代码
items = []
@app.route("/", methods=["GET", "POST"])
def todo():
if request.method == "POST":
data = request.get_json()
items.append(data["item"])
return render_template("list.html", items=items)
19. 词云生成器
python
复制代码
@app.route("/<topic>")
def wordcloud(topic):
# 获取维基百科内容
response = requests.get(f"维基百科API/{topic}")
text = response.json()["extract"]
# 生成词云
wordcloud = WordCloud().generate(text)
svg = wordcloud.to_svg()
return render_template("wordcloud.html", svg=svg)
🎯 核心要点速记
| 分类 |
关键字 |
用途 |
| 应用 |
Flask(__name__) |
创建应用 |
| 路由 |
@app.route() |
定义URL映射 |
| 请求 |
request |
获取请求数据 |
| 响应 |
return, jsonify() |
返回响应 |
| 模板 |
render_template() |
渲染HTML |
| 模板语法 |
{``{ }}, {% %} |
动态内容 |
| 动态路由 |
<variable> |
URL参数捕获 |
| 错误处理 |
@app.errorhandler() |
自定义错误页面 |
| 外部调用 |
requests |
调用API |
| JSON处理 |
get_json(), jsonify() |
JSON数据交换 |
⚡ 一句话总结每个知识点
- 创建应用 :
app = Flask(__name__)
- 定义路由 :
@app.route("/path")
- 处理请求 :使用
request对象
- 返回响应 :直接返回或
jsonify()
- 渲染模板 :
render_template("模板.html", 参数)
- 模板变量 :
{``{ 变量名 }}显示内容
- 模板逻辑 :
{% for %}循环,{% if %}条件
- 动态路由 :
@app.route("/<参数名>")
- 接收JSON :
request.get_json()
- 调用API :
requests.get(url)或requests.post()
- 错误处理 :
try-except捕获异常
- 启动应用 :
app.run(debug=True)
💡 开发流程速查
开发一个新端点
- 定义路由:
@app.route("/endpoint", methods=["METHOD"])
- 创建函数:
def function_name():
- 获取数据:
data = request.get_json() 或 param = request.args.get("key")
- 处理逻辑:你的业务代码
- 返回响应:
return jsonify(result) 或 return render_template(...)
常见状态码
200:成功
201:创建成功
400:请求错误
401:未授权
404:资源不存在
500:服务器错误