1

假设你需要编写一个简单的非 RESTful API,并且想使用django-tastypie来完成,你会怎么做?

Tastypie 只提供Resource与数据模型紧密耦合的 s。

有没有办法将tastepie 的其他API 实用程序(如身份验证、序列化等)用于“简单”API?当然这可以写成一个简单的视图,但是你会错过美味派给你的其他东西。

一个简单的示例是接收字符串并将其反转的 API。

4

1 回答 1

1

这是目的prepend_urls- 您可以将自定义端点添加到现有方法中。开箱即用,它们就像普通视图一样工作,但您现在可以从您的资源中调用您需要的所有函数 - 并返回普通HttpResponse或搭载现有的 Tastypie 函数以返回丰富的对象。

例如,如果我有一个User资源并想提供一个端点来确定用户当前是否通过返回1or进行了身份验证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].

于 2013-08-17T18:18:50.127 回答