2013-10-31 37 views
0

我正在使用tangypie和DjangoAuthorization方法。如何基於當前用戶使用tastypie進行自動篩選

我有這樣的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)。 (我不希望只是一個過濾器添加到我的ressource,我真的希望用戶只能夠訪問到他的朋友)

我可以覆蓋使用get_list tastypie功能GET方法,但它似乎相當醜陋。

那麼這樣做的好方法是什麼?

Thx!

回答

0

我會用Nested Resources

一個GET調用/student/{{ id }}/friends 將返回的學生朋友列表

你只需要重寫prepend_urls和定義將創建響應

+0

事實上,我能做到這一點,但其實我是想我的網址'/學生/格式= json'只返回該用戶的朋友? – hulyce

+0

通過添加您學生ID的參數? – adriencog

+0

你是什麼意思?我不能只調用URL'/ student/{{id}} /',它會返回關於我的學生的信息,而不是他的朋友。 – hulyce

0

方法如果不希望使用「每個用戶資源「 - http://django-tastypie.readthedocs.org/en/latest/cookbook.html#creating-per-user-resources,

我建議你寫一個授權中間件,在請求繼續到tastypie資源之前根據有問題的用戶過濾好友。 這樣你就只能得到資源中的學生朋友。

參考此鏈接創建中間件 - https://docs.djangoproject.com/en/dev/topics/http/middleware/

,並密切關注middlwares的順序。

必須後把你的中間件「django.contrib.auth.middleware.AuthenticationMiddleware」

+0

非常感謝,我實際上正在尋找或「每用戶資源」文檔(我不知道它存在)! – hulyce

相關問題