django-allauth signalsを使う方法|実例付

※本サイトにはプロモーション・広告が含まれています。

こちらの記事では、

django-allauth signalsの使い方、実例

をご紹介します

allauthには、色々な独自のsignalsが用意されています

  1. ログインしたとき
  2. ユーザー登録したとき
  3. メールが確認(confirm)されたとき などなど

詳しく知りたい!という方は公式ドキュメントでご確認下さい

ただ、公式ドキュメントには実例などが無いため、どうやって使うのか色々と試すのも時間がかかります

ということで、こちらの記事では簡単な実例と共に解説致しますので、是非ここでマスターして実戦で使ってみて下さい

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

実例紹介「email_confirmed」Eメールが確認されたとき

ここでは簡単な例として、「Eメールが確認されたら、ターミナルに「Eメールが確認されました!」と記述します

from allauth.account.signals import email_confirmed

def post_email_confirmed_receiver(**kwrags):
    print("Eメールが確認されました!")

email_confirmed.connect(post_email_confirmed_receiver)

こちらは、accounts内などのmodels.py内最下部に記述して動作確認済みです

実際には、print()の部分をご自身の好きなコードに変えてください

Djangoのsignalsとの違い

Djangoのsignalsでは、senderを引数で受け取りconnectします

が、allauthのsignalsではsenderなどは不要なようですね!

ただ引数で受け取るものを利用することも多々あるので、**kwargsが何か見てみましょう!

def post_email_confirmed_receiver(**kwrags):
    print(kwargs)

email_confirmed.connect(post_email_confirmed_receiver)

[Output]

{
   'signal': <django.dispatch.dispatcher.Signal object at 0xxxrandomdigitsxxx>, 
   'sender': <class 'allauth.account.models.EmailConfirmationHMAC'>, 
   'request': <WSGIRequest: POST '/accounts/confirm-email/xxxxxxxxxxxxxxxxxxxxx'>, 
   'email_address': <EmailAddress: test@itc.tokyo>
}

signal, sender, request, email_address

の4つを受け取っているのがわかりますね!

そして何も与えなくとも既に全て必要なものが格納されています

この中でemail_addressは実際のモデルオブジェクトなので活用することはできそうです!

まとめ

今回は、email_confirmedのみの実例をご紹介しましたが、基本的にはどのsignalsも同じ構成で使用可能です

  1. receiverファンクションの記述
  2. receiverをconnectする

是非色々と試してみて下さい

最後までご覧いただきありがとうございました!!!

タイトルとURLをコピーしました