【发布时间】:2016-01-09 09:04:52
【问题描述】:
我正在开发一个基于 Flask 的 OAuth 项目,该项目具有 OAuthSignIn 类的单个实例。这个类对于我支持的每个 OAuth 客户端 Facebook、Twitter 和 Google 都有三个子类。服务器上只有一个实例,它们都包含一个名为 oauth_session 的对象,用于对适当的 OAuth 端点进行端点调用。为确保这些调用代表当前用户,在调用之前,我必须将oauth_session 对象的access_token 变量编辑为当前用户的session['access_token']。我想通过在超类 (OAuthObject) 中找到的包装器来做到这一点。
以下是我在服务器上所做的一个非常基本的模型,仅显示它的继承性和不继承性。我做了一个包装器来编辑子类的oauth_session.access_token,然后把它扔到OAuthObect的超类中,所以我只需要写一次。
from functools import wraps
class OAuthSessionObject():
def __init__(self):
self.access_token = "r424jt3g"
class OAuthObject():
def __init__(self):
pass
def auth_request(f):
@wraps(f)
def wrapper(self):
self.oauth_session.access_token = 444
#self.oauth_session.access_token = session['access_token']
return f(self)
return wrapper
class GoogleObject(OAuthObject):
def __init__(self):
self.oauth_session = OAuthSessionObject()
@OAuthObject.auth_request
def make_request(self):
print("Making a request with updated access_token:", self.oauth_session.access_token)
google = GoogleObject()
google.make_request()
Python 2 与 Python 3
这个问题,在 Python 3 中只有 works,我目前在 heroku 和本地运行 Python 2 服务器,我收到以下错误:
@OAuthSignIn.auth_request
TypeError: unbound method auth_request() must be called with OAuthSignIn instance as first argument (got function instance instead)
如何在 Python 2 中完成这项工作??
【问题讨论】:
标签: python inheritance oauth flask wrapper