見出し画像

【Django】allauthを使って承認機能を実装 (新規登録・ログイン・ログアウト...ect)

【前提条件】
-----------------------------------------------------------------------------
djangoのインストールが完了しプロジェクトディレクトリとアプリケーションディレクトリの作成、setting.pyにアプリケーションの登録までが
完了していること
-----------------------------------------------------------------------------

【確認事項】
本記事では、pythonのバージョンが3.0.0以上の環境で開発しているので、
コマンドは全てpython3 manage.py〜の表記にしています。
バージョンに合わせてpython3 manage.py 〜 →python manage.py
に読み変えてください。

【参考】


1. カスタムユーザーモデルのモデルのアプリケーション作成

まずは、allauth関連の前にプロジェクトディレクトリを作成しておく。
もうすでに作ってたら不要。
もし作っていなければ下記にて作る。
(今回は、my_projectという名前にした)

$ django-admin startproject my_project


続いて、allauthを扱うための、新規のアプリケーションディレクトリを作成する。
今回は"accounts"という名前にする。
以下のコマンドを実行

$ python3 manage.py startapp accounts

"accounts"ディレクトリが作成されたことを確認したら、
setting.pyにアプリケーションの登録をする。

2. allauthのインストール

下記のコマンドでインストール

$ pip install django-allauth


3. ユーザー作成を担うメソッドを持ったクラスを実装

"accounts"ディレクトリの中のmodels.pyに下記のコードを追記。
UserManager, AbstractUserをインポートすることを忘れないように注意。

from django.contrib.auth.models import UserManager, AbstractUser

class CustomUserManager(UserManager):
    use_in_migrations = True
 
    def _create_user(self, email, username, password, **extra_fields):
        # create_user と create_superuser の共通処理
        if not email:
            raise ValueError('email must be set')
        if not username:
            raise ValueError('username must be set')
 
        user = self.model(email=email, username=username, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
 
        return user
 
    def create_user(self, username, email=None, password=None, **extra_fields):
 
        if not email:
            raise ValueError('email must be set')
        if not username:
            raise ValueError('username must be set')
 
        extra_fields.setdefault('is_staff', False)
        extra_fields.setdefault('is_superuser', False)
 
        return self._create_user(email, username, password, **extra_fields)
 
    def create_superuser(self, username, email=None, password=None, **extra_fields):
 
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
 
        if extra_fields.get('is_staff') is not True:
            raise ValueError('Superuser must have is_staff=True.')
 
        if extra_fields.get('is_superuser') is not True:
            raise ValueError('Superuser must have is_superuser=True.')
 
        return self._create_user(email, username, password, **extra_fields)


ここから先は

5,872字 / 5画像

¥ 900

期間限定!Amazon Payで支払うと抽選で
Amazonギフトカード5,000円分が当たる

この記事が気に入ったらチップで応援してみませんか?