函数装饰器应用场景-权限验证
#! -*- coding: utf-8 -*-
"""
使用场景1: 授权
"""
from functools import wraps
"""
执行每个函数之前,获取验证参数
如果没有验证过,就调用验证函数
如果已经验证过,则执行当前函数
"""
class Req:
def __init__(self, auth=False, user=''):
self.auth = auth
self.user = user
def authenticate(user):
if user != 'admin':
return False
return True
def requires_auth(f):
@wraps(f)
def decorated(*args, **kwargs):
auth = r.auth
if auth:
return f(*args, auth=True, **kwargs)
# 也有可能不是return?
if not authenticate(r.user):
return f(*args, auth=False, **kwargs)
return f(*args, auth=True, **kwargs)
return decorated
r = Req()
@requires_auth
def access_pic(auth=False):
if auth:
print('access pic succ')
else:
print('access pic fail')
access_pic()
r.user = 'admin'
access_pic()
执行结果:
access pic fail
access pic succ
小结
Python装饰器在Flask中一个典型的应用场景就是权限验证
网友评论