假设你需要编写一个简单的非 RESTful API,并且想使用django-tastypie来完成,你会怎么做?
Tastypie 只提供Resource
与数据模型紧密耦合的 s。
有没有办法将tastepie 的其他API 实用程序(如身份验证、序列化等)用于“简单”API?当然这可以写成一个简单的视图,但是你会错过美味派给你的其他东西。
一个简单的示例是接收字符串并将其反转的 API。
假设你需要编写一个简单的非 RESTful API,并且想使用django-tastypie来完成,你会怎么做?
Tastypie 只提供Resource
与数据模型紧密耦合的 s。
有没有办法将tastepie 的其他API 实用程序(如身份验证、序列化等)用于“简单”API?当然这可以写成一个简单的视图,但是你会错过美味派给你的其他东西。
一个简单的示例是接收字符串并将其反转的 API。
这是目的prepend_urls
- 您可以将自定义端点添加到现有方法中。开箱即用,它们就像普通视图一样工作,但您现在可以从您的资源中调用您需要的所有函数 - 并返回普通HttpResponse
或搭载现有的 Tastypie 函数以返回丰富的对象。
例如,如果我有一个User
资源并想提供一个端点来确定用户当前是否通过返回1
or进行了身份验证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)
- 有效地模拟对/user/?id=[authenticated user's ID]
.