0

我正在使用带有 DjangoAuthorization 方法的tastepie。

我有一个这样的 StudentResource :

class StudentResource(ModelResource):
  friends = fields.ToManyField(StudentResource, 'friends', null=True)

  class Meta:
    queryset = Student.objects.all()
    resource_name = 'student'
    authorization = DjangoAuthorization()

所以我的每个学生都有很多朋友。

现在,我想返回,当我的用户只对他的朋友进行 API 调用时。(基于他的 django id)。(我不想只是在我的资源中添加一个过滤器,我真的希望用户只能访问他的朋友)

我可以使用 get_list sweetpie 函数覆盖 GET 方法,但它看起来很丑。

那么这样做的好方法是什么?

谢谢 !

4

3 回答 3

0

我会使用嵌套资源

GET 调用/student/{{ id }}/friends 将返回学生朋友的列表

您只需要覆盖prepend_urls并定义将创建响应的方法

于 2013-10-31T13:45:06.340 回答
0

如果您不想使用此处记录的“每用户资源” - http://django-tastypie.readthedocs.org/en/latest/cookbook.html#creating-per-user-resources

我给你的建议是编写一个授权中间件,在请求继续到美味派资源之前根据相关用户过滤朋友。这样,您只能在资源中获得学生的朋友。

请参阅此链接以创建中间件 - https://docs.djangoproject.com/en/dev/topics/http/middleware/

并密切关注中间件的顺序。

您必须将中间件放在 'django.contrib.auth.middleware.AuthenticationMiddleware' 之后

于 2013-11-04T05:56:39.160 回答
0

实际上,这样做的好方法是为 StudentResource 创建一个自定义授权。

这里是美味的文档解释:http ://django-tastypie.readthedocs.org/en/latest/authorization.html

于 2014-01-16T16:42:50.440 回答