Django開発~ブログ構築編5~カスタムユーザー

django

学習記録

Django開発~ブログ構築編4~サイトマップの続きです。

Djangoで、カスタムユーザーモデルを実装してみましょう。

カスタムユーザーモデルとは

Djangoでは、既存のユーザーモデルをカスタマイズして利用した方がよいとされています。参考

ユーザーモデルはデータベースと依存関係の状態になるケースが多いので、後からユーザーモデルのプロパティを変更したいとなった場合、既存のデータと不整合を生じてしまいます。

ユーザーモデルをカスタマイズしたい場合は、AbstractUserAbstractBaseUserを継承した新しいユーザー(カスタムユーザー)を設定します。

AbstractUserはデフォルトのユーザーフィールドを保持し、パーミッションの設定を行うことができます。AbstractBaseUserは、より詳細な設定を行うことを可能にします(その代りカスタマイズが大変になります)。

よくわかりませんよね? 実装しながら学んでいきましょう^^

accounts アプリケーション作成

accountsアプリケーションを作成し、カスタムユーザーを実装します。

settings.pyのアップデート

accounts アプリを作成したら、settings.pyに記述しましょう。

カスタムユーザーモデルの作成

makeコマンドが実行後、accoutns アプリケーションフォルダーが作成されますので、models.pyにカスタムユーザーモデルを記述しましょう。

マイグレーションしたいところですが、ユーザーに紐づけたデータが存在する場合は、マイグレーションできません。

ブログアプリでは、Postモデルの変更を行う必要があります。

念のため、コンテナを立ち上げなおしましょう。

ここまで完了したらマイグレーションを実行します。

ユーザー作成・変更フォーム作成

フォームの作成を行います。Djangoの慣習では、forms.pyファイルにフォームを記述することになっているので、accountsフォルダ配下に作成しましょう。

admin.pyにユーザーモデルを追加

管理画面からカスタムユーザーが確認できるようにadmin.pyに設定を追加しましょう。

管理ユーザーを作成して、localhost:8000/admin にアクセスしてみましょう。

Django認証機能

Django認証機能を使えるようにしましょう。

ユーザーがログイン済みか否かの判定をlist.htmlに加えます。

login.htmlの作成

registrationフォルダ配下にlogin.htmlを作成する決まりになっています。

accountsフォルダ配下に作成しましょう。

login.htmlを記述します。

ログイン・ログアウトリダイレクト先

settings.pyにログイン・ログアウトのリダイレクト先を記述できます。

ここまで完了したら管理画面からログアウトして、「localhost:8000/blog」にアクセスして、ログインの処理が正常にできるか確かめてみましょう。

SignUpの実装

最後にSignUpの実装をして終わりにしましょう。

まず、list.htmlにSignUpのリンクをはりましょう。

次にsignup.htmlをaccountsのtemplates/registrationフォルダ配下に作成します。

accounts フォルダに urls.pyを作成します。

プロジェクトのurls.pyにもaccountsのパスを記述します。

最後の、SignUpのViewを作成します。

localhost:8000/blog にアクセスして、SignUpが実装できたか確かめてみましょう。

おまけ

おまけとして、ログインしたユーザーの記事のみ表示されるようにしてみましょう。

「{% if user.id == post.author.id %}」にて、ログインユーザーの記事のみ、表示されるように変更しました。

user は、Djangoの返却値でデフォルトで設定されているユーザー情報が格納されている変数名で、user.idとするとログインユーザーの情報が取得できます。post.author.idは、Postモデルに設定したauthorカラムからユーザーのIDを取得しています。

これらの値を突き合わせることで、ログインしたユーザーの投稿記事か否かの判定を行っています。

おわりに

よりblogに近づいてきましたね^^
Djangoの機能は色々あるので、日々新しい発見がありますね。

コメントを残す