Djangoでパスワード等の暗号化保存を隠蔽する

隠蔽するっていうか、viewにごりごり書くのではなくてModelのメソッドで処理してしまおうという話です。このエントリの応用ですね。

import hashlib

class Member(models.Model):
    name = models.CharField(max_length=32)
    passwd = models.CharField(max_length=256)
    def save(self, force_insert=False, force_update=False):
        self.passwd = hashlib.md5(self.passwd).hexdigest()
        super(Member, self).save(force_insert, force_insert)
Modelのsave()メソッドをオーバーライドしています。これで、登録フォームなどからPOSTされたデータをそのままsave()してもデータベース上には暗号化された状態で保存されます。
adminサイトで作成したユーザ情報なんかのパスワードとかも、暗号化して保存してくれます。便利便利。