Djangoで管理サイトを作り、投稿されたデータの読み・書き・編集・削除を行う【admin.py】
Djangoではデフォルトで管理サイトというものが用意されている。
admin.py
に少し書き足して、管理ユーザーを作成するコマンドを打つだけで、簡単にデータの読み書きが実現できる。
ソースコードは40分Djangoから流用する。
admin.pyの編集
bbs/admin.py
を開いて下記のように編集する。
from django.contrib import admin
from .models import Topic
admin.site.register(Topic)
モデルクラス、Topic
をインポートして、admin
に登録(register)する。これで、管理サイト上でTopic
を操作できるようになる。
管理ユーザーを作成する。
下記のコマンドを実行する
python3 manage.py createsuperuser
すると、インタラクティブシェルになり、管理ユーザーのユーザー名とパスワード、メールアドレスの入力を求められる。(現時点ではメールアドレスは未入力OKなので、そのままEnterを押しても問題はない。)
管理サイトへアクセスする。
config/urls.py
を見ると、adminのパスはadmin/
へアクセスすれば良いことがわかる。
そこで、開発用サーバーを起動し、
python3 manage.py runserver 127.0.0.1:8000
http://127.0.0.1:8000/admin/
へアクセスする。
下記のような管理サイトのログインフォームが表示されるので、先ほど管理ユーザーを作ったときのユーザー名とパスワードを入力してログインボタンを押す。
管理サイトには先ほど追加した、Topicが表示されている。
後は自由に追加や編集、削除、閲覧などができる。
もし、ここにTopicモデルクラスが表示されていない場合は、bbs/admin.py
にて、Topicモデルが登録されているかチェックすると良いだろう。管理サイトでTopicモデルの編集を行いたくない場合は、
from django.contrib import admin
from .models import Topic
#admin.site.register(Topic)
このようにコメントアウトで無効化しておく。これだけで管理サイトからTopicモデルの読み書き削除編集ができなくなる。
結論
このように管理サイトは数行のコードと1回のコマンドで成立する。CRUDが簡単に実現できるので、なるべく早い段階から覚えておけば、入出力作業で困ることは無いだろう。
とりあえず、作ったモデルを操作して動作確認をしたい時などにおすすめする。
この先にやること
管理サイトのカスタム、新規作成時に任意のフォームを使用する、セキュリティ対策などが有る。
管理サイトのカスタム
本番での運用を考えるのであれば、まだまだ使いづらいので、管理サイトをさらにカスタマイズして、目当てのデータを探しやすくする。下記記事を参照。
Djangoの管理サイトをカスタムする【全件表示、全フィールド表示、並び替え、画像表示、検索など】
管理サイトの新規作成フォームのカスタム
管理サイトのフォームが使いづらい場合、例えば、改行が必要であるにもかかわらず、1行のテキストボックスが表示されている場合。この場合はオリジナルのフォームを用意して対処できる。
Djangoの管理サイトのフォームをカスタムする【forms.py】
管理サイトのセキュリティ対策
不特定多数の人物のアクセスが予想される、クラウドサーバーへのデプロイを視野に入れて開発をしている場合、管理サイトのセキュリティ対策はきちんと行っておいたほうがよい。例えば、管理サイトのURLを予測不能なものにしたり、指定のIPアドレス以外をシャットアウトするなどが有効だろう。
下記記事に管理サイトにおけるセキュリティ対策が網羅されているので参照を推奨する。
【Django】デプロイ後に管理サイトを管理者以外がアクセスできないようにする【UUID+MIDDLEWAREによるURL複雑化とIPアドレス制限】
管理サイトにカスタムアクションを追加する
デフォルトでは一覧表示時に、チェックボタンをチェックして、プルダウンメニューからまとめて削除する事ができる。
このアクションに追加をすることで、面倒な作業をまとめて一気に行うことができる。(例えば指定したユーザーに対して、まとめて定型文のメールを送信する等)
【Django】admin.pyからカスタムアクションを追加し、管理サイトから実行【crontab、BaseCommandが使えない場合の対処法】
管理サイトにアクセスし、POSTメソッドを送信する
例えば、これから作るものが、特定のメンバーだけ利用可能なウェブサイト・ウェブアプリである場合、その特定のメンバーのアカウントを前もって作っておく必要がある。
だが、手動で作っていくのはとても大変。だから自動的にアカウントを作成していく必要があるだろう。
下記記事の、管理サイトへのアクセスと、POSTメソッド送信処理を真似て作ると良い。
【Python】requestsライブラリを使用して、DjangoにPOSTメソッドのHTTPリクエストを送信する(管理サイトへのログイン)【セッションを維持してCSRF問題の対策】