[英]Using django-tastypie for a non-RESTful API
假設您需要編寫一個簡單的非RESTful API,並想使用django-tastypie做到這一點 ,您將如何做?
Tastypie僅提供與數據模型緊密耦合的Resource
。
有沒有一種方法可以將asteapie的其他實用程序用於API(例如身份驗證,序列化等),但可以將其用於“簡單” API? 當然,這可以寫成一個簡單的視圖,但是那樣的話,您可能會錯過了好看的其他東西。
一個簡單的示例是一個接收字符串並反轉它的API。
這是prepend_urls
的目的-您可以將自定義端點添加到現有方法中。 開箱即用的它們就像普通視圖一樣工作,但是現在您可以從Resource中調用所需的所有功能-並返回純HttpResponse
或在現有的Deliciouspie函數上搭載以返回豐富的對象。
例如,如果我有一個User
資源,並且想提供一個端點來確定用戶當前是否通過返回1
或0
身份驗證,則可以這樣做:
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")
或者,如果我實際上想返回經過身份驗證的用戶的實際用戶資源,則可以(例如return HttpResponse("1")
用return self.get_detail(request, id=request.user.id)
替換return HttpResponse("1")
return self.get_detail(request, id=request.user.id)
-有效地模擬呼叫/user/?id=[authenticated user's ID]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.