Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django中使用gmail api_Django_Oauth 2.0_Gmail Api - Fatal编程技术网

在django中使用gmail api

在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 =

我对Django有点陌生,需要一些帮助将我的python脚本(身份验证、构建gmail服务、查询gmail)翻译成Django应用程序。我试图使用GoogleDjango示例和它们在这里指定的类,但有点困惑。任何帮助都将不胜感激!当我访问我的索引时,下面的代码使我通过身份验证流程,但是在单击我的google个人资料后,生成的页面是一个错误:
“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')