在django中使用gmail api
我对Django有点陌生,需要一些帮助将我的python脚本(身份验证、构建gmail服务、查询gmail)翻译成Django应用程序。我试图使用GoogleDjango示例和它们在这里指定的类,但有点困惑。任何帮助都将不胜感激!当我访问我的索引时,下面的代码使我通过身份验证流程,但是在单击我的google个人资料后,生成的页面是一个错误:在django中使用gmail api,django,oauth-2.0,gmail-api,Django,Oauth 2.0,Gmail Api,我对Django有点陌生,需要一些帮助将我的python脚本(身份验证、构建gmail服务、查询gmail)翻译成Django应用程序。我试图使用GoogleDjango示例和它们在这里指定的类,但有点困惑。任何帮助都将不胜感激!当我访问我的索引时,下面的代码使我通过身份验证流程,但是在单击我的google个人资料后,生成的页面是一个错误:“ValueError at/app/ 无法分配None:“CredentialsModel.id”不允许空值 查看代码: CLIENT_SECRETS =
“ValueError at/app/
无法分配None:“CredentialsModel.id”不允许空值
查看代码:
CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), '..', 'client_secret.json')
REDIRECT_URI = 'http://localhost:8080/'
SCOPES = [
'https://www.googleapis.com/auth/gmail.modify',
]
def index(request):
storage = Storage(CredentialsModel, 'id', request.user.id, 'credential')
credentials = storage.get()
flow = flow_from_clientsecrets(CLIENT_SECRETS, scope=SCOPES)
http = httplib2.Http()
if credentials is None or credentials.invalid:
credentials = run(flow, storage, http=http)
# Authorize the httplib2.Http object with our credentials
http = credentials.authorize(http)
# Build the Gmail service from discovery
gmail_service = build('gmail', 'v1', http=http)
# then do something, query threads, messages, etc,
and return them to a template - not sure where exactly to put the methods for querying threads, messages, etc.
型号:
from django.db import models
import pickle
import base64
from django.contrib import admin
from django.contrib.auth.models import User
from django.db import models
from oauth2client.django_orm import FlowField
from oauth2client.django_orm import CredentialsField
class CredentialsModel(models.Model):
id = models.ForeignKey(User, primary_key=True)
credential = CredentialsField()
class CredentialsAdmin(admin.ModelAdmin):
pass
admin.site.register(CredentialsModel, CredentialsAdmin)
1) 这一部分完全有问题:
class CredentialsModel(models.Model):
id = models.ForeignKey(User, primary_key=True)
credential = CredentialsField()
如果你想与用户模型建立1-1关系,你可以使用
user = models.OneToOneField(User, primary_key=True)
2) 您必须将此部分分离到一个新的admin.py文件中,以避免将来出现问题
class CredentialsAdmin(admin.ModelAdmin):
pass
admin.site.register(CredentialsModel, CredentialsAdmin)
3) 问题来自这里:
storage = Storage(CredentialsModel, 'id', request.user.id, 'credential')
用户id!=用户
正确的一点是:
storage = Storage(CredentialsModel, 'id', request.user, 'credential')
谢谢-我不得不将存储中的“id”更改为“用户”,但它看起来起作用了。
storage = Storage(CredentialsModel, 'id', request.user, 'credential')