您的位置:首页 > 新闻 > 资讯 > 互联网行业黑话_正规的网页制作_百度seo快速排名优化软件_百度网盘官网入口

互联网行业黑话_正规的网页制作_百度seo快速排名优化软件_百度网盘官网入口

2025/5/8 15:19:35 来源:https://blog.csdn.net/weixin_41405524/article/details/146299538  浏览:    关键词:互联网行业黑话_正规的网页制作_百度seo快速排名优化软件_百度网盘官网入口
互联网行业黑话_正规的网页制作_百度seo快速排名优化软件_百度网盘官网入口

在 Flask 中,装饰器(Decorator)是一种 Python 语法特性,它允许你在不修改原始函数的情况下,扩展其功能。Flask 使用装饰器来定义路由、请求前后钩子、中间件等。


1. Flask 装饰器的基本概念

Python 的装饰器本质上是一个高阶函数,它接受一个函数作为参数,并返回一个新的函数。例如:

def my_decorator(f):def wrapper():print("调用前")f()print("调用后")return wrapper@my_decorator
def say_hello():print("Hello, Flask!")say_hello()

执行 say_hello() 时,输出:

调用前
Hello, Flask!
调用后

这里 @my_decorator 等价于 say_hello = my_decorator(say_hello)


2. Flask 中常见的装饰器

Flask 提供了一系列装饰器用于不同的功能,最常见的包括:

  • 路由装饰器
  • 请求前/后处理装饰器
  • 错误处理装饰器
  • Flask 扩展提供的装饰器

2.1 路由装饰器 @app.route

Flask 使用 @app.route 装饰器来注册 URL 路由,使某个函数在访问特定 URL 时被调用。

from flask import Flaskapp = Flask(__name__)@app.route('/')  # 访问根路径时执行
def home():return "欢迎来到 Flask 首页"@app.route('/about')
def about():return "关于页面"if __name__ == '__main__':app.run(debug=True)

这里的 @app.route('/') 本质上是 app.add_url_rule('/', 'home', home) 的简化写法。


2.2 处理 HTTP 请求方法

默认情况下,@app.route 只允许 GET 请求,你可以使用 methods 参数指定多个方法:

@app.route('/submit', methods=['GET', 'POST'])
def submit():if request.method == 'POST':return "收到 POST 请求"return "收到 GET 请求"

2.3 @app.before_request & @app.after_request

Flask 允许你在每个请求处理之前或之后执行代码,可以用来做权限校验、日志记录等。

(1) @app.before_request

@app.before_request 在请求到达视图函数之前执行,适合用来验证权限、日志记录等。

from flask import request@app.before_request
def before_request_func():print(f"正在处理请求: {request.path}")
(2) @app.after_request

@app.after_request 在视图函数执行后,返回响应之前执行,适合用来修改响应。

@app.after_request
def after_request_func(response):response.headers["X-Custom-Header"] = "FlaskDemo"return response

2.4 @app.errorhandler

用于处理特定的 HTTP 错误,例如 404、500。

@app.errorhandler(404)
def not_found_error(error):return "页面未找到", 404

3. 自定义 Flask 装饰器

除了 Flask 内置的装饰器,你也可以自定义装饰器,例如:检查用户是否登录。

from flask import request, jsonifydef login_required(f):def wrapper(*args, **kwargs):token = request.headers.get("Authorization")if not token:return jsonify({"error": "未授权"}), 401return f(*args, **kwargs)return wrapper@app.route('/protected')
@login_required
def protected():return jsonify({"message": "成功访问受保护资源"})

当访问 /protected 时,如果请求头没有 Authorization,返回 401。


4. Flask 扩展中的装饰器

Flask 生态系统中的很多扩展也使用了装饰器,例如:

  • Flask-Login: @login_required
  • Flask-CORS: @cross_origin()
  • Flask-RESTful: @marshal_with()
  • Flask-Cache: @cache.cached(timeout=60)

示例(使用 Flask-Login 扩展):

from flask_login import login_required@app.route('/dashboard')
@login_required
def dashboard():return "欢迎来到控制面板"

总结

  1. Flask 装饰器是基于 Python 高阶函数实现的,用于扩展功能。
  2. 常见的 Flask 内置装饰器:
    • @app.route:定义 URL 路由
    • @app.before_request:在请求前执行
    • @app.after_request:在请求后执行
    • @app.errorhandler:处理错误
  3. 可以自定义装饰器,用于认证、日志等功能。
  4. Flask 扩展提供的装饰器(如 @login_required)增强了 Flask 的能力。😃

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com