ひきつづき DigestAuth: 専用のフィールドタイプを追加
すっかり Django ブログになってしまいました…。さて、例のパッケージをアップデートしました。
http://voltex.jp/downloads/Mozo.Django.DigestAuth-0.2.tar.gz
変更点は
DigestPasswordHashField という専用のフィールドタイプを追加した。これにより、パスワードのハッシュ処理が透過的に行えるようになり、ジェネリックビューだけですべての更新操作が行えるようになった。maxlength の取扱いが微妙。いずれ直そう。コード例:
from django.db.models import Model, fields from mozo.django.db.models.fields import DigestPasswordHashField class User(Model): username = fields.CharField(maxlength=255) pw_hash = DigestPasswordHashField(maxlength=80, username_field='username')
「みんなのもの」宣言をしていたにもかかわらず、本リリースからあらためて MIT ライセンスをつけてみた。なんで BSD にしなかったかというと、第 3 項の扱いがめんどうくさかったから。
製作メモ
- django.forms.FormField.extract_data(self, data_dict) がモデルからデータをとってくる関数。ここをフックすれば、レンダリング対象となるデータのすり替えができる。このプラグインでは「パスワードを一切レンダリングしない」動作を実現するために利用している。
- django.db.forms.fields.Field.get_manipulator_new_data(self, new_data, ref) が、ブラウザからマニピュレータを介して得られたデータの dict (new_data) から値を取り出す関数。ここをフックすれば、ブラウザから取得したデータをモデルのデータとして DB に突っ込む前に加工できる。このプラグインでは、models.py で指定されたユーザ名を格納する属性と settings.py で指定されたレルムとを併せて計算されたハッシュ値をブラウザから得た生パスワードの代わりに格納する処理を実現するために利用している。