Djangoで特定のページのみBasic認証をかける
やり方は、以下のページの通りです。
djangosnippets: view by view basic authentication decorator
スニペットの保存
まず、上記サイトのスニペットをコピー&ペーストして、プロジェクト内に保存します。
basic_auth_view.py
import base64 from django.http import HttpResponse from django.contrib.auth import authenticate, login ############################################################################# # def view_or_basicauth(view, request, test_func, realm = "", *args, **kwargs): (中略) def view_decorator(func): def wrapper(request, *args, **kwargs): return view_or_basicauth(func, request, lambda u: u.has_perm(perm), realm, *args, **kwargs) return wrapper return view_decorator
ビュー内で呼び出し
上記手順で保存したファイルから利用する関数をimportし、ビューのデコレータとして記述します。
views.py
from basic_auth_view import logged_in_or_basicauth # ログインもしくはBasic認証で閲覧できるビュー @logged_in_or_basicauth() def some_view(request): ... return render( ... )
Apache2の設定に追記
WSGIモジュールでBasic認証を利用可能にするため、Apache2のサイトのconfファイルに以下の内容を追記します。
WSGIPassAuthorization On
実際に試してみる
ブラウザからBasic認証を追加したURLへアクセスすると、未ログインの場合はBasic認証のダイアログが表示され、ログイン済みの場合はページが表示されます。