今日、 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.pyINSTALLED_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ミドルウエアから、 インスピレーションを得た。以下のスニペットの機能にほぼ対応しています。

詳しくは bpssl のドキュメント もしくは、 ソースコード を見ててください!