在用户使用其youtube帐户验证其帐户后,我一直在尝试保存凭据。我一直在遵循这个例子,将我新创建的凭据存储在数据库中以备将来使用。https://code.google.com/p/google-api-python-client/source/browse/samples/django_sample/.在它中,我们应该为django创建一个凭据模型,如下所示。
from django.contrib.auth.models import User
from django.db import models
from oauth2client.django_orm import CredentialsField
...
class CredentialsModel(models.Model):
id = models.ForeignKey(User, primary_key=True)
credential = CredentialsField()
我使用的是South,所以我不得不创建一个自定义迁移,因为它不喜欢我的模型中的自定义"CredentialsField"。我从此回购复制用户的迁移https://github.com/ssutee/watna_location/blob/master/location/migrations/0010_auto__add_credentialsmodel.py#L19,如下所示。
def forwards(self, orm):
# Adding model 'CredentialsModel'
db.create_table('location_credentialsmodel', (
('id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], primary_key=True)),
('credential', self.gf('oauth2client.django_orm.CredentialsField')(null=True)),
))
db.send_create_signal('location', ['CredentialsModel'])
现在,每次我运行我的应用程序时,它都会在上崩溃
storage = Storage(CredentialsModel, 'id', user, 'credential')
错误为"init()正好占用2个参数(给定5个)"。我敢肯定,这应该需要5个论点,而不是从文件中判断的2个。有人知道我做错了什么吗?
在我发布这篇文章后,解决方案马上就出现了。我需要从的python通用版本更改导入语句
from oauth2client.file import Storage
到特定于Django版本的
from oauth2client.django_orm import Storage