如何使用TastyPie PATCH更新密码

时间:2012-05-10 08:51:45

标签: django tastypie

我理解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方法运行密码。

1 个答案:

答案 0 :(得分: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