2013-07-31 45 views
2

我正在使用rauth对条带连接进行身份验证。在这样做时,我需要实例化一个OAuth2Service以用于多个视图。现在我的意见文件看起来很像这一点(的作品),但这只是觉得不妥:用Rauth和Django正确创建OAuth2Service

from rauth.service import Oauth2Service 

service = OAuth2Service(
    name = 'stripe', 
    client_id = 'my_client_id', 
    client_secret = 'my_secret', 
    authorize_url = 'auth_url', 
    access_token_url = 'stripe_access_token_url', 
    base_url = 'stripe_api_url', 
) 

def stripe_auth(request): 
    params = {'response_type': 'code'} 
    url = service.get_authorize_url(**params) 
    return HttpResponseRedirect(url) 

def stripe_callback(request): 
    code = request.GET['code'] 
    data = { 
     'grant_type': 'authorization_code', 
     'code': code 
    } 
    resp = service.get_raw_access_token(method='POST', data=data) 
    ... rest of view code ... 

我的问题是,我觉得把“服务”的观点可变外面不知何故错,但我不确定我真的应该如何处理这个问题。我应该把它分成一个单独的模块,把它放在设置文件中,创建一个装饰器?我不确定。

任何意见非常感谢。

+1

从Flask的角度来讲,我并不认为将视图外的服务变量放置是错误的。事实上,这基本上就是我如何使用rauth。如果服务变量让你感觉更好,那么服务变量肯定会存在于它自己的模块中。 – maxcountryman

+0

@maxcountryman谢谢!我当然想过把它放到一个模块中,但它看起来有点像矫枉过正。如果我最终在其他应用程序中使用它,我肯定会采取这一步骤,但我倾向于将它留在原地,除非有人另有说法。再次感谢。 –

回答

0

我通常会添加为这样的瓶Application对象的属性:

app = Flask(....) 
app.stripe = OAuth2Service(
    name = 'stripe', 
    client_id = 'my_client_id', 
    client_secret = 'my_secret', 
    authorize_url = 'auth_url', 
    access_token_url = 'stripe_access_token_url', 
    base_url = 'stripe_api_url', 
) 

这使得它很方便。