Django管理機能(admin)まとめ

django

こんにちは。KOUKIです。

皆さんは、PythonのフレームワークであるDjangoでの開発経験はありますでしょうか?

Djangoはとても便利なフレームワークで、管理機能が標準搭載されています。

しかも、この管理機能はカスタマイズ性に優れており、様々な機能を追加することができます。

今日は、Djangoの便利な管理機能について、ご紹介したいと思います。

事前準備

以下の構成になるようにしてください。

また、requirements.txtについては、管理画面作成用に以下の内容でアップデートしてください。

プロジェクトを作成します。

続いてアプリケーションを作成します。

settgins.pyにmainを追加します。

注意事項

今回は、PostgreSQLではなく、SQLite3を使います。そのため、settings.pyのデータベースの設定はいじりません。

管理ユーザーの作成

次のコマンドで、管理ユーザーを作成しましょう。

dockerコンテナを立ち上げます。

「localhost:8000/admin」にアクセスして、管理画面に入れるか確認しましょう。

管理画面のヘッダーとタイトルを変更

app/urls.pyに次の設定を行うとサイトのヘッダーとタイトルを変更することができます。

モデルを管理画面に登録する

モデルを管理画面に登録してみましょう。

マイグレーションをしましょう。

main/admin.pyにBlogモデルを登録します。

管理画面を確認してみましょう。

Blogsが表示されましたね。

Blogのヘッダを変更する

Blogのヘッダも変更できます。

画面を確認してみましょう。

「BLOG CONTROLLER」という文字列が表示されましたね。

データ列の変更

Blogデータの一覧に表示されるデータ列を変更してみましょう。

Blogにデータを追加して、画面を表示させてみましょう。

Fakerで大量データを作成する

Fakerという便利な3rdパーティー製のデータ生成モジュールがあります。

簡単な使い方を紹介します。

fakerオブジェクトを作成し、既定のプロパティでアクセスするとランダムな文字列を返してくれます。

大量のデータを一気に作りたい場合は、有効です。

以下のプログラムを実行して、500件のデータを作成しましょう。

データが作成し終えたら、dockerコンテナの中のshellから抜けます。

画面をリロードすると500件のデータが投入されているはずです。

フィルターを付けよう

便利なことに、フィルターも付けられます。

管理画面を見てみるとfilterが表示されることがわかると思います。

適当なデータの「IS DRAFT」をFalseにしてみましょう。

Filterの「No」を押下するとFalseにしたデータだけが表示されることがわかると思います。

カスタム検索機能の実装

管理画面上に検索機能を実装します。

search_fieldsを付与しました。

管理画面を確認してみましょう。検索窓が表示されるはずです。

prepopulated field

propopulated filed を設定してみましょう。

マイグレーションを実行しましょう。今回は、すでに既存のデータが入った状態なので、少し注意が必要です。

admin.pyも変更します。

blogのデータを追加してみましょう。

Titleの追加と同時に、slugフィールドが入力されたことがわかると思います。

ページネーションの実装

ページネーションも簡単に実装できます。

画面を表示してみましょう。

アクションの追加

管理画面のアクションを追加することができます。

例えば、is_draftをFalseからTrueに変更するアクションを追加できます。

管理画面から確認してみましょう。

各データのチェックボックスをチェックした状態で、このアクションを実行するとIS_DRAFTがfalseに変わります。

データヒエラルキーの追加

データヒエラルキーを追加できます。

管理画面を確認してみましょう。

画面項目の変更

fieldsを利用すると項目の順番を変更できます。

管理画面を確認してみましょう。

より詳細な変更には、fieldsetsを利用します。

管理画面を確認しましょう。

モデルのプロパティ追加

管理画面上にモデルのプロパティの値を表示できます。

管理画面を確認しましょう。

リッチテキストエディター

django-summoernoteで、リッチテキストエディターを追加してみましょう。

settings.pyにこのモジュールを追加します。

画像を追加できるようにMEDIA_URL, MEDIA_ROOTもついでに設定しておきました。

urls.pyも変更する必要があります。

最後にadmin.pyを修正します。

画面を確認してみましょう。

コメントモデルを作成

コメントモデルを作成しましょう。

マイグレーションを実施しましょう。

管理画面からCommentモデルが確認できるようにadmin.pyに追加します。

管理画面を確認してみましょう。

CommentもFakerを使って、ダミーデータを作成しておきましょう。

これで、Blogに紐づくCommentを作成できます。

インライン処理

Blogの投稿画面の中に、Commentも表示できるようにします。

管理画面を確認してみましょう。

データ一覧上でデータを編集

コメントデータの一覧上でデータを編集できるようにします。

管理画面を確認してみましょう。

コメントの表示・非表示(collapse)

Blogの投稿画面上のコメントに表示・非表示機能を付けます。

クエリーセットのオーバーライド

デフォルトのクエリーセットをオーバーライドして、任意の処理にすることができます。

例えば、ブログに紐づけられたコメント数を表示させたい場合は、次のようにします。

get_queryset関数で、デフォルトのクエリーセットをオーバーライドし、no_of_comments関数でコメントをカウントする処理を追加しました。

それを、Blogのlist_displayに追加してあげれば、画面上に表示されます。

管理画面を確認してみましょう。

カテゴリの追加

カテゴリを追加します。

マイグレーションを実施しましょう。

カテゴリも管理画面上に表示できるようにします。

管理画面を確認しましょう。Blogの投稿画面からカテゴリを追加できるようにしておきました。

ドロップダウンフィルタ機能の実装

django-admin-list-filter-dropdownにて、ドロップダウンフィルタ機能を追加してみましょう。

settings.pyにdjango-admin-list-filter-dropdownを追加します。

admin.pyに以下を追加します。

管理画面を確認してみましょう。

rangefilter

django-admin-rangefilterを導入します。

settings.pyにdjango-admin-rangefilterを追加します。

admin.pyを修正しましょう。

管理画面を確認してみましょう。

Mapの追加

Leafletdjango-geojsonを使って、Mapを作成してみましょう。

settings.pyにこれらのモジュールを追加します。

Mapモデルを追加します。

マイグレーションを実施しましょう。

admin.pyを修正します。

管理画面を表示させてみましょう。

インポート・エクスポート機能

管理画面にインポート・エクスポート機能を付けてみましょう。

settings.pyにモジュールを追加します。

mainアプリケーション配下にresources.pyを作成しましょう。

今回は、とりあえずコメントをインポート・エクスポートできるようにします。

admin.pyを修正します。

管理画面を確認してみましょう。

管理画面のデフォルトのレイアウトを変更する

Django Grappelliを使って、管理画面のレイアウトを変更してみましょう。

settings.pyにモジュールを追加します。

app/urls.pyに次のパスを追加しましょう。

管理画面を確認してみましょう。

削除ボタンの無効化

削除ボタンを無効化できます。

管理画面を確認しましょう。

削除ボタンが消えていることがわかると思います。

ハニーポットの設置

最後にハニーポットを設置して終わりにしましょう。

settings.pyにモジュールを追加します。

app/urls.pyを修正します。

マイグレーションを実行しましょう。

この設定を行うと通常の管理画面のパス「localhost:8000/admin」が「ハニーポット画面(ダミー画面)」に遷移し、「localhost:8000/secret」パスが通常の管理画面のパスになります。

「localhost:8000/admin」にアクセスし、ログインしようとしてください。

ログインできないはずです。

それから「localhost:8000/secret」にアクセスし、「Login attempts」を確認してみてください。

ログインしようとしたユーザーの一覧が確認できると思います。

あとがき

いかがだったでしょうか?

Djangoの管理画面は、3rd-Party製のモジュールを加えると機能が充実していくことがわかると思います。

しかし、紹介した機能は、まだまだ極一部です。

色々な機能を試してみてください^^

それでは、またっ!

参考

ref

コメントを残す