4_Django REST framework入門 ~User modelのカスタマイズ~

Django REST framework
とんぺい
とんぺい

師匠〜!!

おはようございます〜!Django REST frameworkの続きを勉強しに来たブゥ!

師匠
師匠

とんぺいくん、おはよう。前回はDockerを用いてDjangoの環境構築を行ったね。今回はDjangoプロジェクトを立ち上げたら必ず最初に行う、User modelのカスタマイズを行おう。

とんぺい
とんぺい

了解だブゥ!

本日もよろしくお願いします!!

Django REST framework入門一覧

ソースコード

オブジェクトを理解しよう

師匠
師匠

modelについて解説する前に、まずはオブジェクトについて理解しよう。とんぺいくんはオブジェクトについて説明できるかい?

とんぺい
とんぺい

うーん…

オブジェクトという言葉は聞いたことがあるブゥ…

だけど、いざ説明しろと言われるとなかなか難しいブゥ…

師匠
師匠

オブジェクトを一言で説明すると「データと処理のまとまり」のことを言うんだ。簡単に具体例を考えてみよう。

とんぺい
とんぺい

オブジェクトは「データと処理のまとまり」…

これだけだとまだ理解ができていないブゥ…

具体例をお願いします。

師匠
師匠

ではミニブタを例にオブジェクトを考えよう。

ミニブタには、それぞれ「名前」「体重」「年齢」「色」などの特徴があるよね。ミニブタオブジェクトを作ろうとした時、これらが「データ」になるんだ。

とんぺい
とんぺい

ほぅほぅ。ミニブタちゃんをモデルにしてオブジェクトを作成する際には、その特徴がオブジェクトのデータになるんだブゥね!

師匠
師匠

そうだね。そして、ミニブタは「寝る」「走る」「食べる」といった行動を取るよね。これらの行動のことをオブジェクトの「処理」と言うんだ。

とんぺい
とんぺい

なるほどなるほど。ミニブタちゃんをモデルにしてオブジェクトを作成する際には、ミニブタちゃんが取る行動がオブジェクトの処理になるんだブゥね!

師匠
師匠

その通り。そして、それらのデータと処理をひとまとまりにしたものがオブジェクトというものだ。

とんぺい
とんぺい

なるほど〜!!

オブジェクトがどういったものか、これで僕も説明ができるブゥ!

Djangoのmodelとは?

師匠
師匠

では、オブジェクトを理解できたところで、次はDjangoのmodelについて解説していこう。

とんぺい
とんぺい

ここからが本題だブゥね!

よろしくお願いします!!

師匠
師匠

Djangoにおけるmodelとは、アプリケーションに必要なデータ、そのデータに付随する処理を記述する場所のことだ。Djangoは記述されたmodelを元に、アプリケーションに必要なデータを効率的に保存できるようにデータベースの設定を行ってくれるよ。

とんぺい
とんぺい

ほぅほぅ。つまり、Djangoでアプリケーションを作成する際には、保存すべきデータとそのデータに関連する処理を全てmodelにまとめるということだブゥね、

師匠
師匠

その通り。また、DBにデータを保存する場合にはSQL文を書かなくてはいけないのだが、DjangoではORMを使ってDB操作を行うので、SQL文を書かなくて済むんだ。

とんぺい
とんぺい

それは便利だブゥ!

一つのアプリの中に、複数の言語を記述しなくて良くなるから、コードが複雑にならなくて良いブゥね!

Custom User modelを作成する理由

師匠
師匠

modelを理解できたところで、実際にmodelを記述してUser modelのカスタマイズを行ってみよう。DjangoにはデフォルトでUser modelが作成されているが、公式もカスタムユーザを作ることを推奨しているよ。

とんぺい
とんぺい

なんでUser modelのカスタマイズを行うんだブゥ?

デフォルトで用意されているなら、それを使ったほうが簡単な気がするブゥ!

師匠
師匠

デフォルトのUser modelを使用すると、後々ユーザに新しい情報を加えたいときに、DBの初期化を行わなければならなくなる。はじめにCustom User modelを定義しておけば、後々ユーザ情報の変更が容易になるんだよ。

とんぺい
とんぺい

なるほどぉ〜!

Custom User modelを定義することで、その後の開発において柔軟性が増すんだブゥね!

師匠
師匠

そうだね。Custom Userを使用する場合の注意点として、一番最初のmigrationsのinit(0001)時点でCustom Userを使うことを含めなければいけないので、プロジェクトを作成したら、一番初めにCustom Userの定義を行うようにしよう。

とんぺい
とんぺい

了解しましただブゥ!

早くCustom User modelの作成を行いたくなってきたブゥ〜!!

Custom User modelの作成

師匠
師匠

では、とんぺいくんも待ち切れないようだし早速コーディングに入ろう。まずはterminal上で以下のコマンドを入力して、Djangoのアプリを作成するよ。

とんぺい
とんぺい

ぶぶぅ!

profiles-rest-apiフォルダ内に勝手にprofile_apiフォルダが作成されたブゥ!

師匠
師匠

無事にDjangoのアプリが作成された証拠だね。

ではprofile_apiフォルダ内のmodels.pyを編集してCustom User modelを定義しよう。

とんぺい
とんぺい

たくさんコードが出てきたブゥ!!

簡単に解説をお願いします!

師匠
師匠

大きく分けるとUserProfileManagerクラスとUserProfileクラスを新たに作成したよ。UserProfileにはDBに保存したいデータを記述して、UserProfileManagerにはデータに付随するメソッドの定義を行っているよ。

とんぺい
とんぺい

ほぅほぅ。UserProfileemailとかnameとかDBに保存したい項目を定義して、UserProfileManagerでそのデータをどうやって処理するのかを記述しているんだブゥね!

師匠
師匠

その通り。各クラスでは、デフォルトのUser modelであるAbstractBaseUserとデフォルトのUser Manager modelであるBaseUserManagerを継承して、必要な箇所を修正しているね。

とんぺい
とんぺい

ふんふん。1からすべて作るんじゃなくて、元からある機能を継承して、必要な部分だけ修正を行うんだブゥね!1から全て作るよりも簡単にできて良いブゥ!

アプリをプロジェクトに追加

師匠
師匠

Custom User modelの定義が完了したら、次はprofiles_projectprofiles_apiを追加しよう。profiles_projectsettings.pyを以下のように記述するよ。

とんぺい
とんぺい

INSTALLED_APPSの中にprofiles_apiを追加して、AUTH_USER_MODELprofiles_apiで作成したUserProfilemodelを指定するブゥね!

師匠
師匠

そうだね。そして、DjangoでREST frameworkを使用し、APIの認証にtoken認証を使うためにrest_frameworkrest_framework.authtokenINSTALLED_APPSに追加しよう。

とんぺい
とんぺい

了解だブゥ!

うん!全部コーディングできたよ!

migrationファイルの作成

師匠
師匠

では次にmigrationファイルの作成をしよう。migrationファイルとはmodels.pyの内容をデータベースに反映させるための中間ファイルのことを言うよ。このファイルを作成するためには、terminalで以下のコマンドを入力しよう。

とんぺい
とんぺい

profiles_apimigrationsの中に0001_initial.pyというファイルが作成されたブゥ!

師匠
師匠

これがmigrationファイルと言って、Djangoはこのファイルを元に以下のコマンドを入力すると、migrationファイルの内容をSQLに翻訳してデータベースに適用するんだ。

とんぺい
とんぺい

おぉ、たくさんコマンドが出力されたブゥ!!

Applying profiles_api.0001_initial... OK

と書いてあるから、うまくDBに反映されてるブゥ!

superuser(管理者)の作成

師匠
師匠

無事にDBにmodelを反映できたようだね。

では実際に、以下のコマンドをterminalに入力してsuperuserを作成しよう。

とんぺい
とんぺい

無事にできたブゥ!

管理画面にmodelの登録

師匠
師匠

では最後に管理画面でUser modelを確認できるように、管理画面に作成したmodelを登録しよう。profiles_apiadmin.pyを以下のように変更するよ。

とんぺい
とんぺい

うん!admin.pyの書き換えも完了しました!

師匠
師匠

すばらしい。では、terminalでdocker-compose upと入力して、Djangoプロジェクトを立ち上げよう。

とんぺい
とんぺい

docker-compose upっと…..

うん!無事にブラウザにロケットが映ってるブゥ!

師匠
師匠

では、localhost:8000/adminとURLを入力して管理画面にアクセスしよう。

とんぺい
とんぺい

ログインできたブゥ!

師匠
師匠

ログインができたら、PROFILES_APIのUser profilesをクリックしてみよう。登録したユーザの情報が映っているはずだ。

とんぺい
とんぺい

うん。僕の登録したメールアドレスが、無事に映っているブゥ!

まとめ

師匠
師匠

本日はDjangoにおけるmodelについて、Custom User modelの作成方法について解説したね。今後もDjangoに保存したいデータがある場合は、このmodelを修正するので、流れを覚えておこう。

とんぺい
とんぺい

わかったブゥ!

今日も本当にありがとうございました!

また来るブゥ〜

師匠
師匠

はい。今日もお疲れ様。

それではまた次回。

参考

コメント

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