2016-11-11 130 views
1

作为一个开始,我想在Django的谷歌日历中查看我的事件,我试过quickstart example,安装google-api-python-client并下载json文件后,运行成功。在Django中使用谷歌日历api

我跟着Google's example page,样品似乎没有工作,我跑python manage.py makemigrations时得到这个错误:

"Must specify either GOOGLE_OAUTH2_CLIENT_SECRETS_JSON, or "django.core.exceptions.ImproperlyConfigured: Must specify either GOOGLE_OAUTH2_CLIENT_SECRETS_JSON, or both GOOGLE_OAUTH2_CLIENT_ID and GOOGLE_OAUTH2_CLIENT_SECRET in settings.py 

我评论GOOGLE_OAUTH2_CLIENT_IDGOOGLE_OAUTH2_CLIENT_SECRET即使在从settings.py

意见.py:

CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), '..', 'client_secret.json') 

FLOW = flow_from_clientsecrets(
CLIENT_SECRETS, 
scope='https://www.googleapis.com/auth/calendar.readonly', 
redirect_uri='http://www.notify-me.ua:8000/complete/google-oauth2/') 


@login_required 
def home(request): 
    storage = Storage(CredentialsModel, 'id', request.user, 'credential') 
    credential = storage.get() 
    if credential is None or credential.invalid == True: 
     FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY, 
        request.user) 
     authorize_url = FLOW.step1_get_authorize_url() 
     return HttpResponseRedirect(authorize_url) 
    else: 
     http = httplib2.Http() 
     http = credential.authorize(http) 
     service = build("calendar", "v3", http=http) 

     now = datetime.datetime.utcnow().isoformat() + 'Z' 
     eventsResult = service.events() 

     return render(request, 'home.html', { 
      'eventsResult': eventsResult, 
      }) 

@login_required 
def auth_return(request): 
    if not xsrfutil.validate_token(settings.SECRET_KEY, request.REQUEST['state'], request.user): 
     return HttpResponseBadRequest() 
    credential = FLOW.step2_exchange(request.REQUEST) 
    storage = Storage(CredentialsModel, 'id', request.user, 'credential') 
    storage.put(credential) 
    return HttpResponseRedirect("/") 

models.py:

from django.db import models 
from django.contrib.auth.models import User 
from oauth2client.contrib.django_util.models import CredentialsField 

class CredentialsModel(models.Model): 
    id = models.ForeignKey(User, primary_key=True) 
    credential = CredentialsField() 

我想简单地查看来自谷歌日历我的事件。

回答

3

我得到的错误,因为有一个线在我settings.py丢失:

GOOGLE_OAUTH2_CLIENT_SECRETS_JSON = 'client_secret.json' 

其他的都是在文档中。

1

相关的SO问题已经显示如何在页面中打印它(通过获取函数的响应)并插入到日历中使用service.events().insert。有关Calendars and Events的文档可以帮助您了解如何插入,删除,获取,修补或更新日历元数据。 Events: insert类创建事件时提供基本属性和选项属性。

start_datetime = datetime.datetime.now(tz=pytz.utc) 
event = service.events().insert(calendarId='<YOUR EMAIL HERE>@gmail.com', body={ 
'summary': 'Foo', 
'description': 'Bar', 
'start': {'dateTime': start_datetime.isoformat()}, 
'end': {'dateTime': (start_datetime + timedelta(minutes=15)).isoformat()}, 
}).execute() 

print(event) 

您只需将<YOUR EMAIL HERE>更改为您的gmail帐户,然后它会反映到您的日历中。

最后,您可能想检查关于Handle API Errors的文档,这对于如何处理错误响应很有用。

希望这有助于

+0

我觉得我被困在oauth2client的配置中,仍然没有达到你解释@Rebot先生的步骤。我会对[文档](http://oauth2client.readthedocs.io/en/latest/source/oauth2client.contrib.django_util.html)进行一些更改,然后参阅。 –

+0

你把client_secret.json放在你的项目中了吗? –

+0

如果没有,请将您的client_secret.json放入您的项目中,或在settings.py中指定GOOGLE_OAUTH2_CLIENT_ID和GOOGLE_OAUTH2_CLIENT_SECRET。 –