【问题标题】:My custom adapter isn't used by django-allauthdjango-allauth 不使用我的自定义适配器
【发布时间】:2015-01-13 16:58:18
【问题描述】:

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

所以,我的下一步是尝试通过使用适配器来改变模块的行为。

docs 中看起来很简单,但不知何故,我似乎无法让 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 都没有工作,我想我可能只是忘记了设置中的某些内容,但无法弄清楚。

那么我错过了什么或做错了什么?

【问题讨论】:

  • 我将深入研究模块以了解发生了什么。如果我偶然发现解决方案,我会发布答案。
  • 可能与您的问题没有直接关系,但commit=True 不是commit=true
  • @bchhun 你有想过这个吗?
  • @JonathanCox 很遗憾,没有:(
  • 很可能您的适配器位于您的 INSTALLED_APPS 中的 all-auth 之后列出的应用程序中。确保将其放入之前列出的应用程序中,它应该会捡起它。

标签: django adapter django-allauth


【解决方案1】:

你必须添加 ACCOUNT_ADAPTER = 'project.users.adapter.MyAccountAdapter' 到setting.py

有关自定义适配器类的更多详细信息,请查看此链接https://django-allauth.readthedocs.io/en/latest/advanced.html#custom-redirects

【讨论】:

  • 以防万一这对其他人有帮助。我按照上面的说明操作,但将我的自定义适配器文件命名为account_adapter.py,这似乎是保留名称,所以它给出了ModuleNotFoundError。我不得不将其重命名为其他名称,例如 my_account_adapter.py,然后这才奏效。
猜你喜欢
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 2018-08-19
相关资源
最近更新 更多