今日、 bpssl をリリースしました。bpsslは BeProud で欲使っている Django用のSSL対応アプリです。 アクセスする時にHTTPSが必須なURLを指定することがよくありますよね? 例えば、 ログイン画面をHTTPSでしかアクセスできないようにする。ただし、 HTTPでアクセスした場合、 HTTPSのほうのURLにリダイレクトしたいこともよくあります。 bpssl はその対応を簡単にできるようなアプリです。
ウェブサーバーで対応することもありますが、設定変更も面倒だし、アプリケーション ロジックをラップしたいことが多いので、アプリケーションレベルで対応します。
使い方は結構簡単
まずは、ポッケージを PIP でインストールします:
pip install bpssl
もしくは easy_install
で:
easy_install bpssl
次に、 'beproud.django.ssl'
を settings.py
の
INSTALLED_APPS
に追加してください。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
#...
'beproud.django.ssl',
#...
)
それから、 ‘beproud.django.ssl.middleware.SSLRedirectMiddleware’ を MIDDLEWARE_CLASSES に追加してください。
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
#...
'beproud.django.ssl.middleware.SSLRedirectMiddleware',
#...
)
次は SSL_URLS の正規表現んを設定する。
SSL_URLS = (
'^/login/',
'^/purchase/'
# ...
)
ssl_view() というビューデコレータもありますので、ビューレベルでもSSL対応ができます。
Django 側はこれで以上ですが、やっぱりウェブサーバーでの設定も必要ですが、それも簡単です。
もともと、bpssl は http://www.djangosnippets.org に投稿したSSLミドルウエアから、 インスピレーションを得た。以下のスニペットの機能にほぼ対応しています。
- http://djangosnippets.org/snippets/880/
- http://djangosnippets.org/snippets/240/
- http://djangosnippets.org/snippets/1999/
詳しくは bpssl のドキュメント もしくは、 ソースコード を見ててください!