【发布时间】:2011-09-22 03:20:58
【问题描述】:
我有一个请求处理程序和一个装饰器,我想在装饰器中使用 self 对象
class MyHandler(webapp.RequestHandler):
@myDecorator
def get(self):
#code
更新:请注意第一自我和第二自我的区别
class myDecorator(object):
def __init__(self, f):
self.f = f
def __call__(self):
#work with self
-
MyHandler>get(函数) >self(参数) -
myDecorator>__call__(函数) >self(参数)
上面提到的 self 参数是不同的。我的意图是从 __call__ 函数内部访问第一个 self,或者找到一种方法来做类似的事情。
您好,我可以从装饰器中的 get 函数访问 MyHandlers 的 self 参数吗?
更新 2:我想实现一个装饰器来处理谷歌应用引擎中的自定义登录:
我有一个类( requestHandler ):
class SomeHandler(webapp.RequestHandler):
@only_registered_users
def get(self):
#do stuff here
我想装饰get函数以检查用户是否登录:
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
如果会话对象中具有“user_key”属性,我知道用户是否已登录。
这是我对这个具体案例感兴趣的主要目标
如果我做错了什么,请告诉我您的建议/意见!
谢谢!
【问题讨论】:
-
此外,将“Google App Engine”放在仅与装饰器有关的问题前面可能会使您的问题获得更少的浏览量。通用项目的浏览量很大,有关特定平台的问题的浏览和回答速度较慢。
-
没问题,如果您的问题被更多人浏览,我的回答可以得到更多投票。这是双赢。
标签: python google-app-engine decorator