Django:SocialApp 匹配查询不存在
Posted
技术标签:
【中文标题】Django:SocialApp 匹配查询不存在【英文标题】:Django: SocialApp matching query does not exist 【发布时间】:2013-03-02 19:22:54 【问题描述】:我正在使用 django-allauth,并使用以下详细信息配置了 localhost:9000/admin/
:
socialapp .
provider:
Name:
Client id:
App ID, or consumer key
Key:
Secret: etc .
我设置了SITE_ID = 2
(因为我把默认站点example.com
改成了localhost:9000
)
在settings.py中:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'uni_form',
'allauth',
'allauth.account',
'allauth.socialaccount',
'bootstrapform',
# 'allauth.socialaccount.providers.twitter',
# 'allauth.socialaccount.providers.openid',
'allauth.socialaccount.providers.facebook',
)
SOCIALACCOUNT_PROVIDERS = \
'facebook':
'SCOPE': ['email', 'publish_stream'],
'AUTH_PARAMS': 'auth_type': 'reauthenticate' ,
'METHOD': 'oauth2' ,
'LOCALE_FUNC': 'path.to.callable'
当我去:
http://localhost:9000/accounts/facebook/login
我明白了:
Error : `SocialApp matching query does not exist.
我做错了什么?
【问题讨论】:
【参考方案1】:作为将其放入管理员的替代方法,您还可以将其放入您的设置中,如下所示:(至少在 2022 年,版本为 django-allauth==0.45.0
SOCIALACCOUNT_PROVIDERS =
'discord':
# From https://developer.twitter.com
'APP':
'client_id': os.environ['TWITTER_API_KEY'],
'secret': os.environ['TWITTER_API_SECRET'],
'key': os.environ['TWITTER_APP_ID'],
,
'twitter':
# From https://developer.twitter.com
'APP':
'client_id': os.environ['TWITTER_API_KEY'],
'secret': os.environ['TWITTER_API_SECRET'],
'key': os.environ['TWITTER_APP_ID'],
,
【讨论】:
【参考方案2】:第 1 步:转到您的管理页面。
查找social application
第 2 步:现在添加如下图所示的行。
提供您的客户端 ID 和 google api 提供的密钥并将 available site (example.com)
移动到 chosen sites
第 3 步:现在进入管理页面侧边导航中的sites
并像下图那样自定义并保存
第 4 步:现在,在 settings.py 文件中添加 SITE_ID = 1
。
【讨论】:
【参考方案3】:就我而言,在添加社交应用程序页面上,我忘记将我的网站选为"Chosen sites"
??♂️
见下面的截图(右下角是选择的站点列表):
【讨论】:
【参考方案4】:对我来说,当我在settings.py
中出现此错误时:
SITE_ID = 1
当我把它改成2
时它起作用了:
SITE_ID = 2
【讨论】:
【参考方案5】:使用 Django 管理员,您需要创建一个 SocialApp
列出您的 Facebook 应用程序凭据。确保此应用程序附加到正确的站点(如django.contrib.sites.models.Site
)。
在您的情况下,需要有一个 id=2 的 django.contrib.sites.models.Site
实例(检查站点管理员),该实例被列为 SocialApp
的站点。
如果SocialApp
丢失,或者如果它已创建但未附加到与您的settings.SITE_ID
匹配的站点,则allauth
不知道要选择哪个应用程序,从而导致您在上面列出的错误消息。
【讨论】:
感谢作者我错过了 django.contrib.sites.models.Site 行 我无法让管理面板显示我的站点 ID,因此我将其加载到 shell 中:from django.contrib.sites.models import Site
并执行 Site.objects.all()
以查看列表。 Site.objects.get(id=2)
实际上设置为 example,所以我不得不将我的设置更改为 3,这是我的 localhost 设置的值。
我在测试中遇到了这个错误。这给了我解决问题的线索。在您的设置中,您必须添加 from allauth.utils import get_current_site from allauth.socialaccount.models import SocialApp sa = SocialApp.objects.create(name='Facebook', provider='facebook') sa.sites.add(get_current_site( ))
我这样做:user$ python manage.py shell
。然后在交互式提示中,我发出以下两个命令:>>> from django.contrib.sites.models import Site
,然后是>>> sorted([(site.id,site.name) for site in Site.objects.all()])
。输出如下:[(1, u'www.lvh.me'), (2, u'example.com'), (3, u'www.example.com'), (4, u'example.com:80'), (5, u'www.example.com:80')]
以上是关于Django:SocialApp 匹配查询不存在的主要内容,如果未能解决你的问题,请参考以下文章