仅为某些方法应用 Flask MethodView 装饰器
Apply Flask MethodView decorator just for some methods
我想知道是否有任何方法可以仅对 class 中的某些方法使用装饰器,例如在下面的代码中我希望 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) 将 request method
上的条件添加到 decorator
:
@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) 为任何点创建一个通用的 decorator
并在没有 decorators
属性.
的情况下使用他
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_required()
def get(self, user_id):
...
希望对您有所帮助。
我想知道是否有任何方法可以仅对 class 中的某些方法使用装饰器,例如在下面的代码中我希望 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) 将 request method
上的条件添加到 decorator
:
@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) 为任何点创建一个通用的 decorator
并在没有 decorators
属性.
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_required()
def get(self, user_id):
...
希望对您有所帮助。