2016-11-11 53 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。 –