gpt4 book ai didi

python - 仅对某些方法应用 Flask MethodView 装饰器

转载 作者:行者123 更新时间:2023-12-01 06:56:06 26 4
gpt4 key购买 nike

我想知道是否有任何方法可以仅对类中的某些方法使用装饰器,例如在下面的代码中,我希望 token_required 装饰除 POST 之外的所有方法,如何我能实现这个目标吗?

class UserAPI(MethodView):
def token_required(view_method):
@wraps(view_method)
def decorated(*args, **kwargs):
token = None

if 'token' in request.headers:
token = request.headers['token']

if not token:
return "no token"

return view_method(*args, **kwargs)

return decorated

decorators = [token_required]

def get(self, user_id):
if user_id is None:
# return a list of users
return "no user id"
else:
# expose a single user
return "user id"

def post(self):
# create a new user
return "create new user"

def delete(self, user_id):
# delete a single user
return "delete user id"

def put(self, user_id):
# update a single user
return "update user id"

最佳答案

这里有一些方法。

1)请求方法的条件添加到装饰器中:

@wraps(view_method)
def decorated(*args, **kwargs):
if request.method == 'POST':
# skip token processing - just result of view method
return view_method(*args, **kwargs)
token = None # etc... (your code)

2) 为任何点创建一个通用的装饰器,并在没有装饰器属性的情况下使用他。

from functools import wraps

def token_required():
def _token_required(f):
@wraps(f)
def __token_required(*args, **kwargs):
token = None
if 'token' in request.headers:
token = request.headers['token']

if not token:
return "no token"

return f(*args, **kwargs)
return __token_required
return _token_required

只需在需要 token 时添加到特定端点:

@token_required()
def get(self, user_id):
...

希望这有帮助。

关于python - 仅对某些方法应用 Flask MethodView 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58800880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com