【问题标题】:Get authenticated user in django-tastypie在 django-tastypie 中获取经过身份验证的用户
【发布时间】:2013-01-20 15:11:04
【问题描述】:

我刚从 Python 和 Django 开始,并使用 sweetpie 创建一个 RESTful API。

我需要根据认证用户计算资源的一个字段,我打算在我的资源中重写dehydrate_field方法,但是我不知道如何在dehydrate_field方法中获取认证用户。

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

我想我应该能够自己从查询字符串或授权标头中获取用户名,并找到用户,但我觉得它已经在某处的美味派中实现了,但我不能在文档中找到它。

这里有一些示例代码:

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>

我想知道 sweetpie 是否有一些内置功能来获取经过身份验证的用户,或者根据查询字符串参数或标头字段滚动我自己的正确方法。

【问题讨论】:

    标签: python django authentication tastypie


    【解决方案1】:

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

    user = bundle.request.user
    

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

    【讨论】:

      【解决方案2】:

      我对 Tastypie 不是很熟悉,但我认为 Tastypie 资源是 django class based view。在这种情况下,您应该能够让用户使用

      user = self.request.user

      【讨论】:

      • 您好,感谢您的回复,虽然它实际上并没有工作,但它帮助我知道我可以从请求中获取用户,因为 bundle 有一个对请求的引用(not self)。详情见我的回答。
      • 哦,顺便说一句,我不确定tastepie资源是基于django类的视图,在tastepie的文档中找不到它,并且通过检查代码here我认为它不是由第 65 行class Resource(object):
      • Tastypie 资源不是基于类的视图,或者至少现在还不是。 Tastypie 在引入基于类的视图之前发布。此外,资源本质上并不是真正的视图,因为它处理 urlconfig 以及与之关联的视图,因此根据定义,它不是真正的视图。
      • 详细解释+1miki725
      【解决方案3】:

      我用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)
      

      【讨论】:

        猜你喜欢
        • 2020-07-01
        • 1970-01-01
        • 2011-05-07
        • 2018-11-26
        • 1970-01-01
        • 2021-04-07
        • 2021-01-10
        • 1970-01-01
        • 2016-11-30
        相关资源
        最近更新 更多