-1
我的装饰函数的参数正在交换。 在authorized(self, resp)
,resp
变成了ClientView
对象并且self
变成resp
变量。 我如何装饰这个功能,以便它可以用作一种方法?Python - 使用类中的装饰函数
它使用烧瓶类视图和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