2013-08-01 60 views
1

假設你需要編寫一個簡單的非RESTful API,並想用django-tastypie做到這一點,你會怎麼做呢?使用Django-tastypie用於非RESTful API

Tastypie只提供了與數據模型緊密耦合的Resource

有沒有一種方法可以將tastypie的其他實用程序用於API(如身份驗證,serlialization等),但將其用於「簡單」API?當然這可以寫成一個簡單的視圖,但是你會錯過tastypie給你的其他東西。

一個簡單的例子是一個接收一個字符串並反轉它的API。

+1

你不需要使用'ModelResource'還有一個'Resource'類可以繼承http://django-tastypie.readthedocs.org/en/latest/resources.html#why-resource-vs- modelresource –

+0

@HeddevanderHeide我從來沒有提到'ModelResource',而是'Resource',並且如果你看一下,即使'Resource'也假定某種數據模型,我不感興趣,所以這對我沒有任何幫助。 –

回答

1

這是prepend_urls的用途 - 您可以將自定義端點添加到現有方法。他們即裝即用,就像普通視圖一樣工作,但您現在可以從資源中調用所需的所有功能 - 並返回普通HttpResponse或搭載現有的Tastypie函數以返回豐富的對象。如果我

def prepend_urls(self): 
    return [ 
     #... 
     url(r"^(?P<resource_name>%s)/is_authenticated?$" % (self._meta.resource_name), self.wrap_view('is_authenticated')), 
     #... 
    ] 
# ...other methods in your Resource... 
def is_authenticated(self, request, **kwargs): 
    if self._meta.authentication.is_authenticated(request): 
     return HttpResponse("1") 
    else: 
     return HttpResponse("0") 

或者:

舉例來說,如果我有一個User資源,並希望提供一個端點,以確定用戶是否正在通過返回10認證,我應該這樣做實際上想要返回驗證用戶的實際用戶資源,我可以(例如)用return self.get_detail(request, id=request.user.id)替換return HttpResponse("1") - 有效地模擬對/user/?id=[authenticated user's ID]的呼叫。