导读:本期聚焦于小伙伴创作的《Python装饰器如何实现权限校验与日志记录的功能增强》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python装饰器如何实现权限校验与日志记录的功能增强》有用,将其分享出去将是对创作者最好的鼓励。

Python装饰器是一种非常实用的语法特性,它允许我们在不修改原有函数代码的情况下,为函数添加新的功能。在实际的后端开发场景中,权限校验和日志记录是非常常见的需求,通过装饰器可以高效地实现这些功能的统一增强。

Python装饰器如何实现权限校验与日志记录的功能增强

装饰器基础原理

装饰器本质上是一个接收函数作为参数,并返回一个新函数的高阶函数。我们可以把额外的逻辑放在装饰器内部,在调用原函数前后执行这些逻辑,从而实现功能增强。基础的装饰器结构如下:

# 基础装饰器示例
def my_decorator(func):
    def wrapper(*args, **kwargs):
        # 原函数执行前的逻辑
        print("执行前处理逻辑")
        result = func(*args, **kwargs)
        # 原函数执行后的逻辑
        print("执行后处理逻辑")
        return result
    return wrapper

# 使用装饰器
@my_decorator
def test_func():
    print("原函数执行")

test_func()

权限校验装饰器实现

在接口开发中,我们常常需要校验当前用户是否有权限调用某个接口,比如只有管理员角色可以调用删除用户的接口。我们可以编写一个权限校验装饰器,在接口函数执行前校验用户权限。

# 模拟用户权限数据
user_permissions = {
    "user1": ["read", "write"],
    "admin": ["read", "write", "delete"]
}

# 权限校验装饰器
def check_permission(required_permission):
    def decorator(func):
        def wrapper(*args, **kwargs):
            # 从参数中获取当前用户名,实际场景中可能从请求头获取token解析得到
            current_user = kwargs.get("current_user")
            if not current_user:
                raise ValueError("未获取到用户信息")
            # 校验用户是否有对应权限
            if required_permission not in user_permissions.get(current_user, []):
                raise PermissionError(f"用户{current_user}没有{required_permission}权限")
            # 有权限则执行原函数
            return func(*args, **kwargs)
        return wrapper
    return decorator

# 使用权限装饰器的接口函数
@check_permission("delete")
def delete_user(target_user, current_user=None):
    print(f"删除用户{target_user}成功")
    return True

# 测试调用
try:
    delete_user("user2", current_user="user1")
except PermissionError as e:
    print(e)

try:
    delete_user("user2", current_user="admin")
except PermissionError as e:
    print(e)

日志记录装饰器实现

日志记录可以帮我们追踪函数的调用情况,比如记录函数的入参、出参、执行时间等信息,方便后续的问题排查。我们可以编写一个通用的日志记录装饰器。

import time

# 日志记录装饰器
def log_record(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        print(f"函数{func.__name__}开始执行,入参:args={args}, kwargs={kwargs}")
        try:
            result = func(*args, **kwargs)
            end_time = time.time()
            print(f"函数{func.__name__}执行完成,出参:{result},耗时:{end_time - start_time:.4f}秒")
            return result
        except Exception as e:
            end_time = time.time()
            print(f"函数{func.__name__}执行异常,异常信息:{e},耗时:{end_time - start_time:.4f}秒")
            raise
    return wrapper

# 使用日志装饰器的函数
@log_record
def add_user(user_name, age):
    time.sleep(0.1)  # 模拟耗时操作
    print(f"添加用户{user_name}成功")
    return {"name": user_name, "age": age}

# 测试调用
add_user("张三", 25)

组合使用权限与日志装饰器

装饰器可以叠加使用,我们可以同时给一个函数添加权限校验和日志记录的功能,只需要在函数上方依次添加两个装饰器即可。

# 组合使用两个装饰器
@log_record
@check_permission("write")
def update_user(user_id, new_info, current_user=None):
    time.sleep(0.05)
    print(f"更新用户{user_id}的信息为{new_info}")
    return True

# 测试调用
try:
    update_user(1, {"age": 30}, current_user="user1")
except PermissionError as e:
    print(e)

try:
    update_user(1, {"age": 30}, current_user="admin")
except PermissionError as e:
    print(e)

通过上面的案例可以看出,使用装饰器实现权限校验和日志记录的功能增强,避免了在每个业务函数中重复编写相同的逻辑,大幅提升了代码的复用性和可维护性。如果后续需要修改权限校验逻辑或者日志记录格式,只需要修改对应的装饰器即可,不需要逐个修改业务函数。

Python装饰器权限校验日志记录函数增强修改时间:2026-06-21 09:24:28

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。