#python #python-3.x #flask
#python #python-3.x #flask
Вопрос:
Я реализую Flask-RESTful API, где я получаю токен от postman и сравниваю его с токеном, который я настроил в своем коде, как показано ниже:
file: functions.py
def authenticate():
headers = flask.request.headers
bearer = headers.get('Authorization')
token = bearer.split()[1]
try:
if str(hashlib.md5(b'Token_String').hexdigest()) == token:
logger.info('Token authentication successful.')
return True
else:
logger.error('Token autherization failed. Please check the token supplied.')
return False
except Exception as e:
if token is None:
logger.info('Token cannot be null. Supply a token with API call.')
return {'message': 'Token cannot be null. Exception: {error}'.format(error=e)}, 400
else:
logger.info('Token cannot be null. Supply a token with API call.')
return {'message': 'Error reading token. Cannot be Null/Empty. Exception: {error}'.format(error=e)}, 400
Это метод get моего API:
class APIClass(Resource):
@classmethod
def get(self):
logger.info('Initiating get()')
if fc.authenticate():
run_some_sql_statements
else:
return {'message': 'Token authentication failed'}, 401
pass
Вместо использования IF-условия, есть ли способ, которым я могу использовать метод: authenticate
из functions.py
файла в качестве декоратора поверх моего get()
.
Я попытался сделать это и столкнулся с приведенной ниже ошибкой:
from validations import functions as fc
@classmethod
@fc.authenticate
def get(self):
Но я вижу ошибку компиляции: Function 'authenticate' lacks a positional argument
Кто-нибудь может сообщить мне, в чем ошибка, которую я допустил здесь, и как я могу ее исправить?
Ответ №1:
Документы flask-restful содержат раздел о декораторах методов ресурсов:https://flask-restful.readthedocs.io/en/latest/extending.html#resource-method-decorators
class APIClass(Resource):
method_decorators = [authenticate]
Комментарии:
1. это в документах:
method_decorators = {'get': [cache]}