在django-tastypie中获取经过身份验证的用户

时间:2013-01-20 15:11:05

标签: python django authentication tastypie

我刚开始使用Python和Django,并使用tastypie来创建RESTful API。

我需要根据经过身份验证的用户计算资源字段,我计划覆盖资源中的dehydrate_field方法,但我不知道如何在dehydrate_field方法中获取经过身份验证的用户。

我正在使用tastypie的ApiKeyAuthentication,我目前正在URL的查询字符串中传递身份验证参数,但我也希望能够在身份验证标头中传递身份验证参数。

我想我应该能够自己从查询字符串或Authorization标题中获取用户名,并找到具有该用户名的用户,但我觉得它必须已经在tastypie已经实现,但我不能在文档中找到它。

以下是一些示例代码:

class MyModelResource(ModelResource):

    calculated_field = fields.BooleanField(readonly=True)

    class Meta:
        queryset = MyModel.objects.all()
        resource_name = 'mymodel'
        authentication = ApiKeyAuthentication()     

    def dehydrate_calculated_field(self, bundle):
        user = <get authenticated user somehow>
        return <some boolean that's calculated depending on authenticated user>

我想知道tastypie是否具有一些内置功能,可以根据查询字符串参数或标题字段获取经过身份验证的用户或自行推送自己的方法。

3 个答案:

答案 0 :(得分:4)

我找到了问题的答案,以获得我正在做的当前用户

user = bundle.request.user

感谢Aidan Ewen让我指向了正确的方向。

答案 1 :(得分:0)

我对Tastypie并不熟悉,但我认为Tastypie资源是django class based view。在这种情况下,您应该能够通过

获取用户

user = self.request.user

答案 2 :(得分:0)

我使用Per-Request Alterations To The Queryset

class CurrentUserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'current-user'

    def get_object_list(self, request):
        users = super(CurrentUserResource, self).get_object_list(request)
        return users.filter(id=request.user.id)