Engineer in Tokyo

bpssl のDjango SSL対応アプリをリリースしました

今日、bpsslをリリースしました。bpsslBeProudで欲使っている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側はこれで以上ですが、やっぱりウェブサーバーでの設定も必要ですが、それも簡単です。

もともと、bpsslDjango Snippetsに投稿したSSLミドルウエアから、インスピレーションを得た。以下のスニペットの機能にほぼ対応しています。

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