2

TastyPie の基本は理解していますが、カスタムの ModelResource メソッドは非常にわかりにくいです。ユーザーのパスワードを更新するために PATCH API 呼び出しを実行しようとしていますが、データがset_password()メソッドを介して実行されていないため、データベース内の HASH ではなく生の値で更新されています。これが私のModelResourceです:

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'
        excludes = ['is_active', 'is_staff', 'is_superuser']
        authorization = Authorization() 
        detail_allowed_methods = ['get', 'post', 'put', 'delete', 'patch']
        filtering = {
             'username': ALL,
        }
        authentication = ApiKeyAuthentication()

ここでメソッドを使用する必要があると想定していますが、ユーザー テーブルで実際のオブジェクトが更新される前に obj_update、メソッドを介してパスワードを実行するようにこれをフォーマットする方法がわかりません。set_password

4

1 に答える 1

4

すべてのケース (POST、PUT、PATCH) のハッシュ変換へのこの raw_password を処理するには、ハイドレート メソッドを使用する必要があります。raw_passwordTastypie を使用すると、GET リクエストから受け取ったオブジェクトを POST/PUT/PATCH して戻すことができるため (良い習慣であることに加えて)、名前空間の競合が発生しないように、私は個人的に仮想フィールドを定義します。

def hydrate(self, bundle):
    if bundle.data.has_key('raw_password'):
        u = User(username='dummy')
        u.set_password(bundle.data['raw_password'])
        bundle.data['password'] = u.password
    return bundle
于 2012-05-10T13:03:50.913 に答える