2011-12-19 11 views
0

私は、アプリケーションエンジンのフックを使用してデータストアにput()の直前に一部のデータを修正するGoogleのアプリエンジン用のスパムフィルタライブラリを作成しています。これを行うために、ポリモデルクラスをサブクラス化するモデルを作成しました。このクラスはサブクラス化する必要があります。appengineポリモデルで__setitem__を上書きすることは安全ですか?

しかし、クラスの一部のデータについては、値が変更されたときにいくつかのことをしたいと思います。そのためには、__setitem__を上書きする必要があります。しかし、私はsdkがこれを使ってモデルのプロパティの変更を決定し、フィルタなどを適用すると考えているので、上書きを変更すると__setitem__がこれを破る可能性があります。これを取り巻く最善の方法は何ですか?

答えて

2

superで親メソッドを呼び出すことを忘れないでください。メソッドをオーバーライドすることは危険です。しかし、あなたのケースでは、__setitem__は間違った場所です。インスタンスが作成されるたびに、既にクリーンアップされた値から作成されたとしても、スパムからクリーンアップされるからです。

明示的に行うと間違っていますか?

filter_out_spam(obj) 
obj.put() 
+0

明示的なモデルは実際には機能しますが、私はそれを自動化しようとしています。集中化として見てください。ユーザーがこれを自分のアプリに追加したい場合は、これをすべてのput()呼び出しの前に追加するのではなく、1つのコードを編集するだけで済みます。 – bigblind

2

__setitem__を変更しないでください - 代わりに、何をしたいんcustom property classを書きます。

エンティティはdb.putで保存することができるので、レコードを挿入する前に操作を行う場合は、モデル上でputをオーバーライドすることはできません。可能であれば、関連するコードをプロパティクラスに移動して、この必要性を回避する必要があります。

+0

私はputを上書きしていません、私はdtabaseへのリクエストが行われるたびにsdkによって呼び出されるフックを使用しています。私は行動が「置かれている」ことを確認してから、モデルに私のものを行います。 – bigblind

+0

@FrederikCreemersフェア十分です。モデルの '__setitem__'をオーバーライドしないことについての私のアドバイスはまだ適用されます。 –

関連する問題