【问题标题】:Django Tastypie - Resource with object details onlyDjango Tastypie - 仅包含对象详细信息的资源
【发布时间】:2012-11-23 00:58:11
【问题描述】:

在带有 Tastypie 的 Django 中,有没有办法配置资源以使其仅显示对象详细信息?

我想要一个 url /user,它返回经过身份验证的用户的详细信息,而不是包含单个用户对象的列表。我不想使用/users/<id> 来获取用户的详细信息。

这是我的代码的相关部分:

from django.contrib.auth.models import User
from tastypie.resources import ModelResource

class UserResource(ModelResource):

    class Meta:
        queryset        = User.objects.all()
        resource_name   = 'user'
        allowed_methods = ['get', 'put']
        serializer      = SERIALIZER      # Assume those are defined...
        authentication  = AUTHENTICATION  # "
        authorization   = AUTHORIZATION   # "

    def apply_authorization_limits(self, request, object_list):
        return object_list.filter(pk=request.user.pk)

【问题讨论】:

  • 到目前为止你有什么?向我们展示您的代码 - 看起来您使用的是 obj_get_list 而不是 obj_get
  • @Tadeck 我将代码的相关部分添加到问题中。我没有明确使用任何这些方法,但我想我想总是使用obj_get

标签: python django rest tastypie


【解决方案1】:

我可以通过使用以下资源方法的组合来做到这一点

示例用户资源

#Django
from django.contrib.auth.models import User
from django.conf.urls import url

#Tasty
from tastypie.resources import ModelResource

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'users'

        #Disallow list operations
        list_allowed_methods = []
        detail_allowed_methods = ['get', 'put', 'patch']

        #Exclude some fields
        excludes = ('first_name', 'is_active', 'is_staff', 'is_superuser', 'last_name', 'password',)

    #Apply filter for the requesting user
    def apply_authorization_limits(self, request, object_list):
        return object_list.filter(pk=request.user.pk)

    #Override urls such that GET:users/ is actually the user detail endpoint
    def override_urls(self):
        return [
            url(r"^(?P<resource_name>%s)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),
        ]

Tastypie Cookbook 中更详细地解释了使用主键以外的其他内容来获取资源的详细信息

【讨论】:

  • 请注意apply_authorization_limits 已被弃用。 see
  • 那么我们如何才能在以后的版本中达到同样的效果呢?
猜你喜欢
  • 2012-07-18
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 2011-06-18
相关资源
最近更新 更多