【发布时间】:2014-06-15 09:07:31
【问题描述】:
我的装饰函数的参数正在交换。
在authorized(self, resp) 中,resp 正在变成ClientView 对象,self 正在变成resp 变量。
我怎样才能装饰这个函数以便它可以用作方法?
它使用flask类视图和flask_oauthlib。
功能代码:
class ClientView(UserView):
@bp.route('/vklogin/authorized')
@vk.authorized_handler
def authorized(self, resp):
if resp is None:
return 'Access denied: reason=%s error=%s' % (
request.args['error_reason'],
request.args['error_description']
)
session['oauth_token'] = (resp['access_token'], '')
me = self.vk.get('method/users.get?uids={}'.format(resp['user_id']))
return '{}'.format(me.data)
装饰器功能代码:
class OAuthRemoteApp(object):
def authorized_handler(self, f):
@wraps(f)
def decorated(*args, **kwargs):
if 'oauth_verifier' in request.args:
try:
data = self.handle_oauth1_response()
except OAuthException as e:
data = e
elif 'code' in request.args:
try:
data = self.handle_oauth2_response()
except OAuthException as e:
data = e
else:
data = self.handle_unknown_response()
# free request token
session.pop('%s_oauthtok' % self.name, None)
session.pop('%s_oauthredir' % self.name, None)
return f(*((data,) + args), **kwargs)
return decorated
【问题讨论】: