(最終更新月:2021年12月)
「django-allauthのadapterについて知りたい!」という方へ、ACCOUNT_ADAPTERの基本を解説します
当記事を通じて、
- adapterでできること
- adapterの書き方
- adapterのカスタマイズ 実例
について紹介していきます
公式ドキュメントでは、ACCOUNT_ADAPTERについて、自身で作成したアダプタクラスを使い、デフォルトで決められている動作に変更を加えることができる、と書いてあります
まずはデフォルトのアダプタ「DefaultAccountAdapterで何ができるか」を見ていきます!
当記事はアプリ開発~公開までをご紹介しているシリーズの一記事になります
最終的には、下記リンク先のような日報アプリを開発、公開できるように進めていきます
興味のある方は下記よりシリーズをまとめたページへお進みください

✔月9,800円でWebデザインが学べる
デザナルは、Webデザインに苦手意識がある方におすすめのサブスク型スクールです。
なぜなら安い以外にも以下のような特徴があるからです。
- 初期費用不要
- 教材が使い放題
- 案件で収入も得られる
デザナルは稼ぎながら学べる、格安のWebデザインスクールです。
>>デザナルの詳細はこちら<<
利用者の声など、詳しくはこちらでご覧ください↓
何ができるのか?
DefaultAccountAdapterで用意されているメソッドの中で代表的なものは下記の通りです
get_login_redirect_url(self, request)
ログイン後のリダイレクト先を指定するメソッドです
def get_login_redirect_url(self, request):
"""
Returns the default URL to redirect to after logging in. Note
that URLs passed explicitly (e.g. by passing along a `next`
GET parameter) take precedence over the value returned here.
"""
assert request.user.is_authenticated
url = getattr(settings, "LOGIN_REDIRECT_URLNAME", None)
if url:
warnings.warn(
"LOGIN_REDIRECT_URLNAME is deprecated, simply"
" use LOGIN_REDIRECT_URL with a URL name",
DeprecationWarning,
)
else:
url = settings.LOGIN_REDIRECT_URL
return resolve_url(url)
(ソースコードから抜粋)
get_logout_redirect_url (self, request)
ログアウト後のリダイレクト先を指定するメソッドです
def get_logout_redirect_url(self, request):
"""
Returns the URL to redirect to after the user logs out. Note that
this method is also invoked if you attempt to log out while no users
is logged in. Therefore, request.user is not guaranteed to be an
authenticated user.
"""
return resolve_url(app_settings.LOGOUT_REDIRECT_URL)
(ソースコードから抜粋)
get_email_confirmation_redirect_url (self, request)
メールアドレスの確認後のリダイレクト先を指定するメソッドです
def get_email_confirmation_redirect_url(self, request):
"""
The URL to return to after successful e-mail confirmation.
"""
if request.user.is_authenticated:
if app_settings.EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL:
return app_settings.EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL
else:
return self.get_login_redirect_url(request)
else:
return app_settings.EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL
(ソースコードから抜粋)
get_signup_redirect_url (self, request)
新規登録完了後のリダイレクト先を指定するメソッドです
def get_signup_redirect_url(self, request):
return resolve_url(app_settings.SIGNUP_REDIRECT_URL)
(ソースコードから抜粋)
次章で、カスタマイズ方法を見ていきます
アダプタをカスタマイズする
まずは、下記の通りファイルを作成します
accounts > adapter.py
adapter.pyに記述をしていきます
from allauth.account.adapter import DefaultAccountAdapter class MyNippoAdapter(DefaultAccountAdapter): def get_login_redirect_url(self, request): return #リダイレクトしたいURL
(get_login_redirect_urlの例)
記述が終わりましたら、settings.pyで下記を追記します
ACCOUNT_ADAPTER = "accounts.adapter.MyNippoAdapter"
次章、実例を紹介します
日報アプリで使ってみよう!達成すること
現在開発中の日報アプリには、ユーザークラスと拡張クラスである「Profile」クラスが存在します
ユーザー登録をした直後は、Profileクラスはまだ作られていません
ログイン時に、Profileの有無によりリダイレクト先を変更していきます
【実例】ログイン先のREDIRECT_URLを変更する
ユーザーがプロフィールを持っている場合は、そのまま一覧ページへ進みます
持っていない場合は、プロフィール作成ページへ飛びます
【adpter.py】
from allauth.account.adapter import DefaultAccountAdapter
from django.urls import reverse_lazy
from django.urls.base import reverse
class MyNippoAdapter(DefaultAccountAdapter):
def get_login_redirect_url(self, request):
resolved_url = super().get_login_redirect_url(request)
user_obj = request.user
if not hasattr(user_obj, "profile"):
resolved_url = reverse_lazy("profile-create")
else:
profile_obj = user_obj.profile
if profile_obj.username is None:
resolved_url = reverse_lazy("profile-update", kwargs={"pk": profile_obj.pk})
return resolved_url
settings.pyの「ACCOUNT_ADAPTER」へ作成したクラスを格納して完了
細かい解説は省きますが、参考になれば幸いです
おわりに
アダプタのカスタマイズは、
- アダプタを継承したクラスでメソッドの上書き
- settings.py「ACCOUNT_ADAPTER」へ格納
という2ステップで完了します
覚えておくと、色々な場面で柔軟に対応できますので便利です!
さて、次回はユーザーやプロフィールクラスなどについてのテストプログラムについて実際のコードを紹介していきます
当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています
「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」
という方は必見です!
