Я хотел добавить функцию декоратора, которая оборачивает декорированную функцию запроса бутылки в класс. Я попробовал сделать это с помощью проверки, но не могу увидеть никаких изменений, внесенных декоратором, когда я вызываю этот запрос.
Это мой код:
import inspect
from bottle import run, route, template, get, post, request, delete, redirect
def decorator_jwt(func):
def authenticate_jwt(*args):
if (Afunction()):
func(*args)
else:
return False
return authenticate_jwt
def decorator_for_class(cls):
for name, method in inspect.getmembers(cls):
if (not inspect.ismethod(method) and not inspect.isfunction(method)) or inspect.isbuiltin(method):
continue
print("Decorating function %s" % name)
setattr(cls, name, decorator_jwt(method))
return cls
@decorator_for_class
class python_functions:
@route('/')
def show_index():
#something0
@get('/api/V1/something')
def Reboot():
#something
@get('/api/V1/something2')
def umountDevice():
#something2
@post('/api/V1/random/something3')
def LogOut():
#something3






Декоратор routeдобавляет функцию обратного вызова в список маршрутов, хранящихся в объекте Bottle текущего приложения, поэтому последующее применение декоратора decorator_jwt не влияет на функции обратного вызова, уже сохраненные в списке.
Вместо этого вы можете перебирать маршруты, хранящиеся в объекте Bottle текущего приложения, чтобы изменить сохраненные обратные вызовы с применением декоратора decorator_jwt:
from bottle import app
def decorator_for_class(cls):
callbacks = {
func for func in inspect.getmembers(cls)
if inspect.isfunction(func) and not inspect.isbuiltin(func)
}
for route in app().routes:
if route.callback in callbacks:
route.callback = decorator_jwt(route.callback)
return cls
Куда вы добавляете print утверждения? Декоратор decorator_jwt, как указано в вашем вопросе, на самом деле ничего не делает.
Я попробовал это, но все еще не увидел никаких изменений. Я попробовал добавить операторы печати, но ничего не увидел.