我的自定义适配器没有被django-allauth使用

10
我正在使用 django 1.6.5django-allauth 0.18.0,一旦我们在Django的管理面板中创建社交应用程序,社交登录即按预期工作。

因此,我接下来尝试着通过使用适配器来改变该模块的行为。

文档中看起来很简单,但不知何故,我似乎无法让django-allauth使用我的自定义适配器。

以下是我尝试使用pdb进入我的适配器方法的过程。

这是我的文件夹/文件结构:

.
├── manage.py
├── requirements.freeze
├── foo
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── foo_app
    ├── adapters.py
    ├── views.py
    ├── etc...

这是我的 foo/settings.py 文件:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sites',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'south',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.facebook',
    'foo_app'
)
ACCOUNT_ADAPTER="foo_app.adapters.FooAppAccountAdapter"
SOCIALACCOUNT_ADAPTER="foo_app.adapters.FooAppSocialAccountAdapter"

这是我的foo_app/adapters.py文件:

# -*- coding: utf-8 -*-

import pdb

from allauth.account.adapter import DefaultAccountAdapter
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter


class FooAppAccountAdapter(DefaultAccountAdapter):
    def save_user(self, request, user, form, commit=true):
        print "FooAppAccountAdapter.save_user"
        pdb.set_trace()
        return super(FooAppAccountAdapter, self).save_user(
            request, user, form, commit
        )


class FooAppSocialAccountAdapter(DefaultSocialAccountAdapter):
    def pre_social_login(self, request, sociallogin):
        print "FooAppSocialAccountAdapter.pre_social_login"
        pdb.set_trace()
        return super(FooAppSocialAccountAdapter, self).pre_social_login(
            request, sociallogin
        )

    def save_user(self, request, sociallogin, form=None):
        print "FooAppSocialAccountAdapter.save_user"
        pdb.set_trace()
        return super(FooAppSocialAccountAdapter, self).save_user(
            request, sociallogin, form
        )

我的set_trace都没有起作用,我觉得可能是在设置中忘记了某些东西,但无法找出问题所在。

那么,我缺少什么或者做错了什么呢?


我将深入研究该模块以找出发生了什么。如果我偶然发现解决方案,我会发布一个答案。 - bchhun
可能与您的问题不直接相关,但是commit=True而不是commit=true - Oms
@bchhun 你最终解决了这个问题吗? - Jonathan Cox
很遗憾,没有。 - bchhun
2
很可能您的适配器位于INSTALLED_APPS中排在all-auth之后的应用程序中。确保将其放在先于all-auth 的应用程序中,它应该能够识别它。 - ambe5960
1个回答

7

1
如果这能帮到其他人。我按照上面的说明操作,但是我将我的自定义适配器文件命名为account_adapter.py,这似乎是保留名称,因此会出现ModuleNotFoundError错误。我不得不将其重命名为其他名称,例如my_account_adapter.py,然后它就可以工作了。 - curtisp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接