2016-11-11 4 views
1

장고의 Google 캘린더에서 내 일정을보고 싶었는데 google-api-python-client를 설치하고 json 파일을 다운로드 한 후 quickstart example을 실행 해 보았습니다.장고에서 Google 캘린더 API로 작업하기

"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 

내가 settings.py

뷰에서 GOOGLE_OAUTH2_CLIENT_IDGOOGLE_OAUTH2_CLIENT_SECRET 댓글을 달았 후에도 : ​​python manage.py makemigrations을 실행할 때

내가 Google's example page을 따라 시료가 작동하지 않았다, 나는이 오류가 발생했습니다 평 :

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

내가 오류가 발생하고 있습니다.

1

관련 질문에 이미 페이지에서 인쇄하여 (기능의 응답을 얻음으로써) 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) 

당신은 그냥 일정에 반영, 다음 Gmail 계정에 <YOUR EMAIL HERE>을 변경해야합니다.

마지막으로 Handle API Errors에 대한 문서를 확인하고 싶을 수도 있습니다. 오류 응답을 처리하는 방법에 유용합니다. 워드 프로세서에 다른

GOOGLE_OAUTH2_CLIENT_SECRETS_JSON = 'client_secret.json' 

모든 :

희망이 내 settings.py에 빠진 라인이 있었기 때문에

+0

나는 oauth2client의 구성에 갇혀 있다고 생각하지만 여전히 @ Mr.Rebot을 설명하는 단계에 도달하지 못했습니다. [docs] (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을 지정하십시오. –