【Python】Flask 2

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数据交换

⚡ 一句话总结每个知识点

  1. 创建应用app = Flask(__name__)
  2. 定义路由@app.route("/path")
  3. 处理请求 :使用request对象
  4. 返回响应 :直接返回或jsonify()
  5. 渲染模板render_template("模板.html", 参数)
  6. 模板变量{``{ 变量名 }}显示内容
  7. 模板逻辑{% for %}循环,{% if %}条件
  8. 动态路由@app.route("/<参数名>")
  9. 接收JSONrequest.get_json()
  10. 调用APIrequests.get(url)requests.post()
  11. 错误处理try-except捕获异常
  12. 启动应用app.run(debug=True)

💡 开发流程速查

开发一个新端点

  1. 定义路由:@app.route("/endpoint", methods=["METHOD"])
  2. 创建函数:def function_name():
  3. 获取数据:data = request.get_json()param = request.args.get("key")
  4. 处理逻辑:你的业务代码
  5. 返回响应:return jsonify(result)return render_template(...)

常见状态码

  • 200:成功
  • 201:创建成功
  • 400:请求错误
  • 401:未授权
  • 404:资源不存在
  • 500:服务器错误
相关推荐
一条咸鱼_SaltyFish17 小时前
[Day12] 合同审查引擎开发中的技术挑战与解决之道 contract-review-engine
开发语言·人工智能·程序人生·开源软件·ddd·个人开发·ai编程
zho_uzhou17 小时前
倍福指针使用——始终为字节形式
开发语言
郑州光合科技余经理17 小时前
开发实战:海外版同城o2o生活服务平台核心模块设计
开发语言·git·python·架构·uni-app·生活·智慧城市
Psycho_MrZhang17 小时前
Django/Flask/FastAPI简要对比分析
django·flask·fastapi
程序员三藏17 小时前
单元测试详解
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
Cx330❀17 小时前
《C++ 递归、搜索与回溯》第2-3题:合并两个有序链表,反转链表
开发语言·数据结构·c++·算法·链表·面试
540_54017 小时前
ADVANCE Day44
人工智能·python·深度学习
AI科技星17 小时前
电场起源的几何革命:变化的引力场产生电场方程的第一性原理推导、验证与统一性意义
开发语言·人工智能·线性代数·算法·机器学习·数学建模
小六子成长记17 小时前
【C++】:多态的实现
开发语言·c++