2016-11-11 8 views
1

В начале я хотел просмотреть мои события из Google Calendar в Django, я пробовал quickstart example, запустил успешно, после установки google-api-python-client и загрузки json-файла.Работа с календарем Google api в Django

Я следовал за 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() 

Я хочу, чтобы просто просмотреть мои события из календаря Google.

ответ

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, до сих пор не дошел до того, что вы объясняете @ Mr.Rebot. Я внесу некоторые изменения из [docs] (http://oauth2client.readthedocs.io/en/latest/source/oauth2client.contrib.django_util.html) и посмотрю. –

+0

Вы разместили client_secret.json в своем проекте? –

+0

Если нет, поместите свой client_secret.json в свой проект или укажите GOOGLE_OAUTH2_CLIENT_ID и GOOGLE_OAUTH2_CLIENT_SECRET в settings.py. –