配置API
使用app.route()
装饰器app.route()
是Flask最基本的声明API的方式
from flask import Flask
app = Flask(__name__)
# 方式1, 使用 app.route() 装饰器, 第 一个参数为路由路径, methods参数指定请求方法
@app.route("/r1", methods=["GET"])
def r1():
return "r1 api"
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)
使用app.METHOD()
Flask升级到版本2.0.0后,可以使用类似app.get()
、app.post()
等装饰器
from flask import Flask
app = Flask(__name__)
# 方式2, 使用 app.METHOD() 装饰器, 第一个参数为路由路径, METHOD可以为 get, post, put, delete 等
# 需要Flask版本>=2.0.0
@app.get("/r2")
def r2():
return "r2 api"
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)
使用app.add_url_rule()
Flask可以使用app.add_url_rule()
方法来动态添加路由
方法签名
app.add_url_rule(rule, endpoint=None, view_func=None, **options)
# rule: 要定义的URL规则或路径
# endpoint: 可选参数, 表示视图函数的名称, 可以在URL中被引用
# view_func: 处理请求的视图函数
# **options: 包含关于路由的其他配置选项, 例如请求方法、URL变量等
使用示例
from flask import Flask
app = Flask(__name__)
# 方式3, 使用 app.add_url_rule()
def r3():
return "r3 api"
app.add_url_rule("/r4", view_func=r4)
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)
使用蓝图
在 Flask 中,蓝图(Blueprint)是一种组织和管理大型 Flask 应用程序的强大工具。它允许你将应用程序划分为多个可重用的模块,每个模块负责特定的功能或业务逻辑。蓝图可以包含路由、视图函数、模板、静态文件等,并且可以像一个独立的应用一样使用。
使用蓝图有以下几个主要优点:
- 模块化: 将大型应用程序分解为更小的、可管理的模块,提高代码的可维护性和可扩展性。
- 代码复用: 蓝图可以在不同的应用程序中重复使用,减少代码冗余。
- 命名空间: 蓝图可以为路由和模板提供独立的命名空间,避免命名冲突。
- 延迟加载: 蓝图可以延迟加载,只有在需要时才加载相关的代码和资源,提高应用程序的启动速度。
使用示例
from flask import Flask, Blueprint
app = Flask(__name__)
# 方式4, 使用 Blueprint 对象, 需要先创建 Blueprint 对象, 然后再使用 Blueprint 对象的装饰器
bp = Blueprint("api", __name__, url_prefix="/api")
@bp.get("/r4") # api: /api/r4
def r4():
return "r4 api"
app.register_blueprint(bp) # 蓝图需要注册到Flask实例才能被正常使用
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)
使用类视图
在 Flask 中,类视图(Class-based Views)是一种使用类来处理请求的替代方法,与传统的函数视图相比,类视图可以提供更好的代码组织和可扩展性。
类视图本质上就是一个 Python 类,它继承自 Flask 提供的 MethodView
类或 View
类。通过在类中定义不同的方法(如 get()
、post()
等),我们可以针对不同的 HTTP 请求方法编写不同的处理逻辑。
为什么使用类视图?
- 更好的代码组织: 当处理复杂的路由和逻辑时,类视图可以更好地组织代码,将相关的处理逻辑放在同一个类中,提高代码可读性和可维护性。
- 代码复用: 类视图支持继承,可以将公共的逻辑提取到父类中,子类继承父类后可以直接使用或重写父类的方法,减少代码冗余。
- 支持 Mixin: 可以使用 Mixin 来扩展类视图的功能,例如添加身份验证、表单处理等。
使用示例
from flask import Flask, request
from flask.views import View, MethodView
app = Flask(__name__)
# 方式5, 使用视图类
## 5.1 通用视图类, 需要实现 dispatch_request() 方法
class R5View(View):
methods = ["GET"]
def dispatch_request(self):
if request.method == "GET":
return "get r5 api"
app.add_url_rule("/r5", view_func=R5View.as_view('r5'), methods=["GET"])
## 5.2 使用MethodView类
class R6View(MethodView):
def get(self, user_id: int):
return f"get r6 api, user_id is {user_id}"
def post(self, user_id: int):
return f"post r6 api, user_id is {user_id}"
app.add_url_rule("/r6/<int:user_id>", view_func=R6View.as_view('r6'), methods=["GET", "POST"])
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)