2018年4月20日Djangoのログイン・ユーザ登録(カスタムユーザモデル)DjangoPythonDjangoが標準で持つUserモデルを継承してカスタマイズします。環境ユーザ登録概要models.pyurls.pyforms.pyviews.pyテンプレートユーザ登録ページ前回、Userモデルをカスタマイズし、以下のような変更を加えました。idの代わりにuuidを使います。usernameの代わりにemailを使います。nick_nameを追加します。emailを必須かつユニークに変更します。usernameは消します。first_nameとlast_nameを消しします。通常のユーザモデルでは、ログイン・ユーザ登録にusernameを使いましたが、これを削除しました。usernameの代わりにemailをユーザ名として利用します。今回は、この改造したユーザモデルを使ったユーザ登録ページを作ります。URL設計トップページ(/index)ドメイン直下のページです。ログイン前はページタイトルのみですが、ログインすると、ヘッダーナビゲーションにログアウトのリンクを表示します。ログイン(/login)ユーザ名とパスワードを入力してログインします。ログインが完了すると、ログイン状態になってトップページへ遷移します。ログアウト(/logout)ログアウト状態にしてトップページへ遷移します。ユーザ登録(/regist)ユーザ登録をします。登録が完了すると、ログイン状態にしてトップページへ遷移します。CSS設計bootstrap4を使います。css、jsファイルの設置場所はプロジェクトディレクトリ直下のstaticディレクトリです。pj1/pj1/static/css/js/users/manage.pysettings.pyに、静的ファイルの設置場所を設定します。'/static/'仕様1トップページです。「ドメイン/」にアクセスします。画面右上にログインページへのリンクがあります。「ドメイン/login」にアクセスします。新規登録ページへのリンクもあります。ログインページからログインした場合は「ドメイン/」(トップページ)へ遷移します。画面左上の”ログイン”が”ログアウト”になります。「ドメイン/regist」にアクセスします。ログアウトを押すと、ログアウト処理後トップページへリダイレクトします。準備Vagrantでゲスト環境(仮想環境)を作ります。1Userモデルをカスタマイズしています。7.1.1503pyenv1.1.3-5-g7dae197Anaconda3-4.3.0MariaDB5.5.52-1.el7Apache2.4.6mod_wsgi4.5.14Django1.11.3ユーザ登録概要Userモデルの継承してカスタマイズします。usernameの代わりにemailを使うようにしています。1以下のようなDjangoアプリ構成を作ります。プロジェクト名が「pj1」で、アプリケーション名が「users」です。プロジェクトの設定は済ませたものとします。赤字のファイルは、今回変更する部分です。pj1/pj1/__init__.pysettings.pyurls.pywsgi.pyusers/__init__.pyadmin.pyapps.pyurls.pyviews.pymodels.pytemplates/base.htmlindex.htmllogin.htmlregist.htmlmanage.pymodels.py1usersディレクトリ配下のmodels.pyを編集します。内容は前回と同じです。→DjangoのUserモデルカスタマイズ(UUIDを使う)urls.py1pj1ディレクトリのurls.pyを以下のように編集します。'users'))]2usersディレクトリのurls.pyを以下のように編集します。name='regist_save'),]forms.py1usersディレクトリのforms.pyを以下のように編集します。models.pyで定義したカスタムUserモデルをインポートします。Djangoの定義済みを使用する場合は、上記のようにインポートします。User」をインポートしてユーザ登録すると、上記のようなエラーが表示されてしまいます。)もともとUserCreationFormでは、MetaのmodelにUserを指定しています。(“username”,)」のように不要なフィールドが指定がされています。今回は、設定しなおし「email、nick_name、password1、password2」も使用するようにしています。forms.EmailField(required=True)」で必須項目にしました。views.py1usersディレクトリのviews.pyを以下のように編集します。context)解説@login_requiredデコレータです。「ログインしたユーザのみ見せる」という意味です。ログインしていない場合は、ログインページへリダイレクトします。context)ユーザ新規登録画面を表示します。context)「RegisterForm」を使って、ユーザ登録画面に入力した情報を保存します。登録できた場合は「index」ページへリダイレクトします。</body></html>「Base.html」は、すべてのページに表示するウィジェット(ページヘッダー)を定義します。%}「index.html」は、トップページの表示です。%}「login.html」は、ログインページの表示です。%}「regist.html」は、新規登録ページの表示です。