Flask到Django的转换,Flask.url_for flask.request.url &g



我遵循Google OAuth指南在Django中使用一个Flask示例。但是无法理解下面的一些代码。完全正确,怎么可能是烧瓶。将url_for、flask.request.url转换为Django代码

# Flask code
flask.url_for('oauth2callback', _external=True)
# my Django code: just the url???
'http://localhost:8000/api/oauth2callback'
# Flask code
authorization_response = flask.request.url
# my Django code: but it would not work
authorization_response = request.url

在flask.request.url上我找不到任何文档,任何返回的信息

state = flask.session['state']
flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
'client_secret.json',
scopes=['https://www.googleapis.com/auth/drive.metadata.readonly'],
state=state)
flow.redirect_uri = flask.url_for('oauth2callback', _external=True)
authorization_response = flask.request.url
flow.fetch_token(authorization_response=authorization_response)
# Store the credentials in the session.
# ACTION ITEM for developers:
#     Store user's access and refresh tokens in your data store if
#     incorporating this code into your real app.
credentials = flow.credentials
flask.session['credentials'] = {
'token': credentials.token,
'refresh_token': credentials.refresh_token,
'token_uri': credentials.token_uri,
'client_id': credentials.client_id,
'client_secret': credentials.client_secret,
'scopes': credentials.scopes}

fetch_token方法在google用参数(代码等)重定向用户到您的应用程序后提取回调参数,并发送POST请求获取token和refresh_token。

所以,在你的回调操作的Django视图中,你应该像下面这样传递绝对URL:

...
authorization_response = request.build_absolute_uri()
flow.fetch_token(authorization_response=authorization_response)
...

最新更新