2

我了解 TastyPie 的基础知识,但自定义 ModelResource 方法让我很困惑。我正在尝试进行 PATCH api 调用以更新用户的密码,并且数据未通过该set_password()方法运行,因此使用原始值而不是数据库中的 HASH 进行更新。这是我的模型资源:

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

您应该使用 hydrate 方法来处理这个 raw_password 到所有情况(POST、PUT、PATCH)的哈希转换。我个人定义了一个虚拟字段raw_password,以免引起命名空间冲突,因为 Tastypie 允许您返回从 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 回答