Django adminのカスタマイズでログインした状態のみAPIのエンドポイントを公開する方法
今回はDjango adminのカスタマイズでログインした状態のみAPIのエンドポイントを公開する方法についてご紹介いたします。
Django adminのカスタマイズでログインした状態のみAPIのエンドポイントを公開する方法
Django adminのカスタマイズを行っているときのことです。
@admin.registerのデコレーターを使ってget_urlsからAPIのエンドポイントを作成したものの、普通にソースコードを書いただけではログインしてる、してないに関わらずAPIを発行できてしまうことに気付きました。
サンプルプログラムは下記の通りです。
上記のextra_urlsに書かれているtest/apiが今回私が作成したAPIですね。
普通に上記を書いただけだと、例えば
http://localhost/admin/test/user/test/api
のエンドポイントを叩いたときにDjango adminにログインしている、していないに関わらずresponseが返ってきてしまいます。
Django adminはセッションでログイン状態を保持しているらしく、最初はセッション認証周りをかなり調べていました。
実は、簡単にDjango adminにログインしたときのみカスタマイズしたAPIのエンドポイントを叩くことができるようになるのです。
上記のソースコードの例では、下記のようにpathの二番目の引数に対してself.admin_site.admin_viewで囲ってやればOKです。
self.admin_site.admin_viewで囲ってやるだけで、ログインしていない状態で上記エンドポイントを叩いたときは、自動的にログイン画面にリダイレクトされます。
詳しくはadmin_site.admin_viewでググれば内部でどのような処理をしているのか分かるはずです。
当然、selfを使っているので、使用するクラスによってはエラーが発生します。
少なくとも管理画面のadmin.pyでモデルを登録している場合は上記のself.admin_site.admin_viewが使えるはずです。
ぜひ参考にしてみてください。
終わりに
今回はDjango adminのカスタマイズでログインした状態のみAPIのエンドポイントを公開する方法についてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません