NARITO BLOG

Djangoで、会員登録機能を自作する

Python, Django, まとめ・シリーズ,

概要

Djangoで、会員登録機能を自作していきます。 メールアドレスをユーザー名として使うようにし、ログイン画面、仮登録、メールクリックで本登録、ユーザー情報変更ページ、パスワード変更ページ、パスワードを忘れた際の再設定...などなど、よくある一連の機能を実装します。 また、できるだけデフォルトのUserモデルでも動作するように実装していきます。

Userモデルのカスタマイズ

Djangoで、Userモデルのカスタマイズ(継承)
メールアドレスをユーザー名として使うように、Userモデルをカスタマイズします。

ログイン画面

Djangoでログイン画面を自作する
Djangoにもログイン画面は付属していますが、自分のウェブサイトのイメージと違う場合は自作することになります。簡単に作れます。

ユーザー登録

Djangoでユーザー作成処理(仮登録後、URLクリックで本登録)
ユーザー登録機能と、仮登録後にメールが届き、それにアクセスさせると本登録する、といった機能を実装します。

マイページ

Djangoで、ユーザー情報閲覧・更新ページの作成
ユーザー情報の閲覧、更新ページです。閲覧と更新ページには、自分とスーパーユーザー以外はアクセスできないようにもします。

パスワード変更、パスワード忘れ

Djangoで、パスワード変更ページと忘れた際の再設定ページ
パスワードの変更ページと、パスワードを忘れた際の再設定ページを作ります。

OneToOneの方が良さそうなケース

Userモデルのカスタマイズは強力ですが、OneToOneで別モデルと紐づけるほうが便利なこともあります。

既に稼働中のDjangoプロジェクトに導入したい場合

DjangoのUserモデルは、途中から切り替えるのが困難です。そのため、既に稼働中のDjangoプロジェクト内のUserモデルに手を加えたい場合は、OneToOneで拡張するのが無難な方法になります。

他アプリケーションでカスタムUserを定義している場合

言うまでもなく、Userは1種類しか使えません。
他アプリケーションの導入を諦めるか、もしくは他アプリケーションのカスタムUserと互換性があり、かつ自分の要求を満たすカスタムUserを新しく定義するという方法になってしまいます。しかしそれが動くかは他アプリケーションの実装次第であり、労力的に見合わないことも多いです。

Djangoアプリケーションとして配布したい場合

既に2つのケースを書きましたが、それらはユーザー側の視点でした。見方を変えると、ユーザー側の視点では稼働中のDjangoプロジェクトに導入できなかったり、互換性のために自前のカスタムUserが肥大化するのは避けたいはずです。

完成品

Githubにソースコードを置いています。

インストールして...

git clone https://github.com/naritotakizawa/django-register-sample
pip install django

すぐに試せます。

python manage.py makemigrations register
python manage.py migrate
python manage.py runserver
python manage.py createsuperuser

デフォルトではカスタムしたUserモデルを使います。 それが嫌な場合は、settings.pyAUTH_USER_MODELをコメントアウトし、上の手順を行ってください。

カスタムUserを使った後に通常のUserで試したい場合は、関連ファイル(db.sqlite3migrationsディレクトリ)を削除後、上の手順を実行してください。