tengo un controlador de solicitudes y un decorador, me gustaría trabajar con el objeto mismo en el interior del decoradorAcceso argumentos de la función del decorador
class MyHandler(webapp.RequestHandler):
@myDecorator
def get(self):
#code
Actualización: Por favor, observe la diferencia entre el primer y segundo yo
class myDecorator(object):
def __init__(self, f):
self.f = f
def __call__(self):
#work with self
MyHandler
>get
(función)>self
(argumento)myDecorator
>__call__
(función)>self
(argumento)
los argumentos auto mencionados anteriormente son diferentes. Mi intención es acceder al primer yo desde dentro de la función __call__
, o encontrar una manera de hacer algo similar.
Hola, ¿puedo acceder al argumento propio de MyHandlers para obtener la función dentro del decorador?
Update2: Quiero aplicar un decorador de trabajar con un inicio de sesión personalizado en el motor de aplicación de Google:
tengo una clase (RequestHandler):
class SomeHandler(webapp.RequestHandler):
@only_registered_users
def get(self):
#do stuff here
Y Quiero decorar el obtener la función con el fin de comprobar si el usuario está conectado o no:
from util.sessions import Session
import logging
class only_registered_users(object):
def __init__(self, f):
self.f = f
def __call__(self):
def decorated_get(self):
logging.debug("request object:", self.request)
session = Session()
if hasattr(session, 'user_key'):
return self.f(self)
else:
self.request.redirect("/login")
return decorated_get
sé si un uso r ha iniciado sesión si tiene la propiedad 'user_key' en un objeto de sesión.
Ese es el objetivo principal que me interesa en este caso específico
me dejó saber su sugerencia/opinión si estoy haciendo algo mal!
Gracias!
También, poniendo "Google App Engine" frente a una pregunta que es sólo alrededor de decoradores podrían hacer su pregunta conseguir un menor número de puntos de vista. Los elementos genéricos se ven mucho, las preguntas sobre plataformas específicas se visualizan y responden más lentamente. – marr75
Corregido, gracias @ marr75 –
No hay problema, si su pregunta es vista más, mi respuesta puede ser votada más. Es una victoria para todos. – marr75