在 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_ID
和 GOOGLE_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'
其他一切都在文档中。
一开始我想在 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_ID
和 GOOGLE_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'
其他一切都在文档中。