在 Django 中使用 google 日历 api

Working with google calendar api in Django

一开始我想在 Django 中查看 google 日历中的事件,在安装 google-[ 后,我尝试 quickstart example、运行 成功=40=]-python-客户端并下载 json 文件。

我遵循了 Google's example page,示例似乎没有工作,我在 运行ning 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

即使在我从 settings.py

评论 GOOGLE_OAUTH2_CLIENT_IDGOOGLE_OAUTH2_CLIENT_SECRET 之后

views.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 日历中的活动。

相关的 SO 问题已经展示了如何在页面中打印它(通过获取函数的响应)并使用 service.events().insert 插入到日历中。关于Calendars and Events can help you understand how to insert, delete, get, patch or update a calendar metadata. Events: insert Class的文档提供了创建事件时的基本属性和选项属性。

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 的文档,这对于如何处理错误响应很有用。

希望这对您有所帮助

我收到错误是因为我的 settings.py:

中缺少一行
GOOGLE_OAUTH2_CLIENT_SECRETS_JSON = 'client_secret.json'

其他一切都在文档中。