sintaxis que patron decorador python django django-views python-decorators

patron - que es un decorador en python



¿Hay alguna manera de obtener la lista de nombres de vistas que tienen un decorador, Python, Django (2)

Tengo un archivo de views.py como este

views.py

@my_decorator def a(request): return HttpResponse("success") @my_decorator def b(request): return HttpResponse("success") @my_decorator def c(request): return HttpResponse("success") @my_decorator def d(request): return HttpResponse("success") @my_another_decorator def e(request): return HttpResponse("success")

Quiero obtener una lista de vistas con el decorador "my_decorator"

Ejemplo:

views_list_with_my_decorator=["a","b","c","d"]

por favor, ayúdenme, gracias de antemano.


Creo que podrías hacer algún truco con el docorator. La siguiente es mi solución. Solo por tu inspiración. Podrías probar :)

from functools import wraps def my_decorator(func): @wraps(func) def wrap_func(*args, **kwargs): return func() wrap_func.decorator = my_decorator.func_name return wrap_func def my_another_decorator(func): @wraps(func) def wrap_func(*args, **kwargs): return func() wrap_func.decorator = my_another_decorator.func_name return wrap_func @my_decorator def a(request): pass @my_decorator def b(request): rpass @my_decorator def c(request): pass @my_decorator def d(request): pass @my_another_decorator def e(request): pass func_list_with_my_decorator = [e for e in globals().values() if getattr(e, ''decorator'', None)==''my_decorator''] print func_list_with_my_decorator

Si quiere probar si una función tiene un decorador, haga lo siguiente:

print a.decorator == ''my_decorator''


decorated = [] def myDecorator(fn): decorated.append(fn) ...

¿tal vez? pero solo funcionará si han sido decorados (es decir, importados o de otra forma "ejecutados" ... no funcionará si simplemente están sentados en archivos .py en alguna parte)