Python 使用Django访问GA API:/accounts/login/redirect问题
我正在开发Django应用程序,该应用程序将向用户提供有关其Google Analytics帐户的信息(帐户ID、属性、视图ID) 但我一开始就在尝试解决用户授权问题(处理oAuth 2服务器响应) 我遵循了谷歌的文档 MODELS.PYPython 使用Django访问GA API:/accounts/login/redirect问题,python,django,oauth-2.0,google-api-python-client,oauth2client,Python,Django,Oauth 2.0,Google Api Python Client,Oauth2client,我正在开发Django应用程序,该应用程序将向用户提供有关其Google Analytics帐户的信息(帐户ID、属性、视图ID) 但我一开始就在尝试解决用户授权问题(处理oAuth 2服务器响应) 我遵循了谷歌的文档 MODELS.PY from django.db import models from django.contrib.auth.models import User from oauth2client.django_orm import FlowField, Credential
from django.db import models
from django.contrib.auth.models import User
from oauth2client.django_orm import FlowField, CredentialsField
class FlowModel(models.Model):
id = models.ForeignKey(User, primary_key=True)
flow = FlowField()
class CredentialsModel(models.Model):
id = models.ForeignKey(User, primary_key=True)
credential = CredentialsField()
VIEWS.PY
import os
import httplib2
from oauth2client import xsrfutil
from oauth2client.client import flow_from_clientsecrets
from oauth2client.django_orm import Storage
from apiclient.discovery import build
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseBadRequest
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.urlresolvers import reverse
from django.contrib.sites.models import get_current_site
from .models import CredentialsModel, FlowModel
CLIENT_SECRETS = os.path.join(
os.path.dirname(__file__), 'client_secrets.json')
def get_accounts_ids(service):
accounts = service.management().accounts().list().execute()
ids = []
if accounts.get('items'):
for account in accounts['items']:
ids.append(account['id'])
return ids
@login_required
def index(request):
# use the first REDIRECT_URI if you are developing your app
# locally, and the second in production
REDIRECT_URI = 'http://localhost:8080/oauth2/oauth2callback'
#REDIRECT_URI = "https://%s%s" % (
# get_current_site(request).domain, reverse("oauth2:return"))
FLOW = flow_from_clientsecrets(
CLIENT_SECRETS,
scope='https://www.googleapis.com/auth/analytics.readonly',
redirect_uri=REDIRECT_URI
)
user = request.user
storage = Storage(CredentialsModel, 'id', user, 'credential')
credential = storage.get()
if credential is None or credential.invalid is True:
FLOW.params['state'] = xsrfutil.generate_token(
settings.SECRET_KEY, user)
authorize_url = FLOW.step1_get_authorize_url()
webbrowser.open_new(authorize_url)
f = FlowModel(id=user, flow=FLOW)
f.save()
return HttpResponseRedirect(authorize_url)
else:
http = httplib2.Http()
http = credential.authorize(http)
service = build('analytics', 'v3', http=http)
ids = get_account_ids(service)
return render(
request, 'ga_auth2/main.html', {'ids':ids})
@login_required
def auth_return(request):
user = request.user
if not xsrfutil.validate_token(
settings.SECRET_KEY, request.REQUEST['state'], user):
return HttpResponseBadRequest()
FLOW = FlowModel.objects.get(id=user).flow
credential = FLOW.step2_exchange(request.REQUEST)
storage = Storage(CredentialsModel, 'id', user, 'credential')
storage.put(credential)
return HttpResponseRedirect("/oauth2")
url.PY
from django.conf.urls import include, url
from django.contrib import admin
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'oauth2callback', views.auth_return, name='return'),
]
问题是当我去
它正在被重定向到
我看到404错误页面没有找到
我在Google Developers控制台中定义了API项目:
Javascript来源:localhost:8080
重定向uri:localhost:8080/oauth2/oauth2callback
我想象着有了这个重定向,我被推到我的谷歌帐户登录。
但当我从提示符执行Python代码时,浏览器会自动打开,要求我登录和/或授权API访问
我如何处理这个问题
提前多谢 您已使用
login\u required
保护您的索引视图,因此它会将您重定向到登录页面。如果你不想那样,就不要用那个装饰器